2016年5月14日 星期六
2016年5月12日 星期四
To P1A,P1B 補變三、變四
變化三:費氏數列
f0=1、f1=1、f2=2、f3=3、f4=5、f5=8、f6=13、...、f20=10946、...、
f50=20365011074、...、f70=308061521170129、...、f90=4660046610375530309
輸入 n , 0<=n<=90,請問 fn的值,若費氏計算機只顯示最右8位數,小於8位靠右顯示,
f0=1、f1=1、f2=2、f3=3、f4=5、f5=8、f6=13、...、f20=10946、...、
f50=20365011074、...、f70=308061521170129、...、f90=4660046610375530309
輸入 n , 0<=n<=90,請問 fn的值,若費氏計算機只顯示最右8位數,小於8位靠右顯示,
左邊空格以^表示,則f29顯示「^^832040」,又f50=20365011074顯示「65011074」,而
f39=102334155顯示「02334155」,
f76=5527939700884757顯示「00884757」
需宣告long long f0,f1,f2後設定f0=1,f1=1, 輸入n值
for(i=2 至 n )
{
f2 = f0+f1; //每新的 i 時重算 f2
f0=f1; //下一個 i 時f1變成f0
f1=f2; //下一個 i 時f2變成f1
}
因為只印8位,設 k =
f2 除10^8取餘數
若k等於f2左邊補^,否則補0
if(k==f2) cout << setw(8) <<
setfill('^') << k << endl;
else cout << setw(8) << setfill('0')
<< k << endl;
變化四:判斷可否被11整除
如果是long long int 可存範圍正整數 n <=2^63-1 = 9223372036854775807{約9.22*10^18}
比照a024所有位數和,但分奇數位的和odd及偶數位的和even,若odd-even可被11整除的話,則 n 也可被11整除。{這樣解題時只要加個if判斷是奇數位就加至odd、偶數位就加至even}
但如果n的位數超出19位數怎麼辦?假設n不超過30位數,為了可以使用long long整數讀,
我們將n切成n1及n2兩部份,並且在n1及n2之前加d1、d2代表各幾位數
例如: n為901234567890123456789共有21位數將之分為11位及10位,則輸入 d1 n1 d2 n2
11 90123456789 10 123456789 ,這樣就可以輸入,也可以分別算 n1及n2的奇數位及偶數位
就是給 d1 n1 d2 n2 為11 90123456789 10 123456789 就是問 901234567890123456789
如果是long long int 可存範圍正整數 n <=2^63-1 = 9223372036854775807{約9.22*10^18}
比照a024所有位數和,但分奇數位的和odd及偶數位的和even,若odd-even可被11整除的話,則 n 也可被11整除。{這樣解題時只要加個if判斷是奇數位就加至odd、偶數位就加至even}
但如果n的位數超出19位數怎麼辦?假設n不超過30位數,為了可以使用long long整數讀,
我們將n切成n1及n2兩部份,並且在n1及n2之前加d1、d2代表各幾位數
例如: n為901234567890123456789共有21位數將之分為11位及10位,則輸入 d1 n1 d2 n2
11 90123456789 10 123456789 ,這樣就可以輸入,也可以分別算 n1及n2的奇數位及偶數位
就是給 d1 n1 d2 n2 為11 90123456789 10 123456789 就是問 901234567890123456789
是否可被 11 整除? {n2的前面有0時不會讀入,所以要判斷d2的位數自己算前導0的位數}
假設有一 22位數
n=7,251,000,000,000,000,000,218分成 左8位、右14位,
則輸入d1, n1
, d2, n2 就是 8 72510000 14 218
宣告兩個變數odd、even分別設為0代表奇位數和及偶位和,以最右為第1位
for(i=1; n2!=0; ++i) // 因 n2 每次切1位,最後為0時就停
{
將n2的 末位切掉{ c = n2%10 , n2/=10 }
若i是奇數位則 加至 odd ,偶數位則 加至 even
}
接著同上處理
n1, 但
i=d2+1開始 {n1=72510000最右1位是原數n的第14+1位}
判斷 odd 及 even 的差是否為
11的倍數 就是判斷 n 是否被11整除
給P1A、P1B
5/6已上傳一個壓縮檔,內有p1-ch11講義,是word檔,選擇答案反白設定顏色即可
不然P1G及P1C的Ch11參考講義亦同
不然P1G及P1C的Ch11參考講義亦同
2016年5月6日 星期五
P1AB資概資料
接著要將程式變化題的解題邏輯放上去,來得及就全放,來不及就放三個
變化一:運算結果最大值
給三個數字 a,b,c ,只有+、* 兩種運算及一個括號,問下列運算式哪一個?最大?
(a+b)*c、a+(b*c)、(a*b)+c、a*(b+c)
給三個數字 a,b,c ,只有+、* 兩種運算及一個括號,問下列運算式哪一個?最大?
(a+b)*c、a+(b*c)、(a*b)+c、a*(b+c)
設p表目前最大值的算式編號,v1=算式1的值,v2~v4=算式2~算式4的值
v0=v1 , p=1 {註v1最大}
v0=v1 , p=1 {註v1最大}
若v2>v0 則 p=2, v0=v2 {註v2最大}
若v3>v0 則 p=3, v0=v3 {註v3最大}
若v4>v0 則 p=4, v0=v4 {註v4最大}
依p值知哪一算式最大,且最大值在v0
變化二:糖果紙換糖果
一顆糖果3元,5張糖果紙可換1顆,又3張糖果紙可換1元,而且如果有4張糖果紙的話可向老闆先借1張換1顆馬上吃再還,請問有 n 元最多可以吃到幾顆糖果?
一顆糖果3元,5張糖果紙可換1顆,又3張糖果紙可換1元,而且如果有4張糖果紙的話可向老闆先借1張換1顆馬上吃再還,請問有 n 元最多可以吃到幾顆糖果?
設n為金額,c為買到的糖果數,p為吃完的糖果紙, e為已吃了多少顆
1 c=n/3買糖果,剩n%=3元
2 e=c吃了c個,p=c有c張紙
3 若p>=4張可換糖果來吃 p/4顆,剩p%4張
4 若剩3張而且有2元可再吃一顆
變三、變四另補
2016年5月9日 星期一
給 P1A、P1B
我決定抽選的由a001~a007抽1、a008~a014抽1、a015~a021抽1
變化的會由以下所公佈的四個練習題中抽2個(但類似而已)
變化一:運算結果最大值
給三個數字 a,b,c ,只有+、* 兩種運算及一個括號,問下列運算式哪一個?最大?
(a+b)*c、a+(b*c)、(a*b)+c、a*(b+c)
變化二:糖果紙換糖果
一顆糖果3元,5張糖果紙可換1顆,又3張糖果紙可換1元,而且如果有4張糖果紙的話可向老闆先借1張換1顆馬上吃再還,請問有 n 元最多可以吃到幾顆糖果?
變化三:費氏數列
f0=1、f1=1、f2=2、f3=3、f4=5、f5=8、f6=13、...、f20=10946、...、
f50=20365011074、...、f70=308061521170129、...、f90=4660046610375530309
輸入 n , 0<=n<=90,請問 fn的值
變化四:判斷可否被11整除
如果是long long int 可存範圍正整數 n <=2^63-1 = 9223372036854775807{約9.22*10^18}
比照a024所有位數和,但分奇數位的和odd及偶數位的和even,若odd-even可被11整除的話,則 n 也可被11整除。{這樣解題時只要加個if判斷是奇數位就加至odd、偶數位就加至even}
但如果n的位數超出19位數怎麼辦?假設n不超過30位數,為了可以使用long long整數讀,
我們將n平分為n1及n2兩部份,並且在n1及n2之前加d1、d2代表各幾位數
例如: n為901234567890123456789共有21位數將之分為11位及10位,則輸入 d1 n1 d2 n2
11 90123456789 10 123456789 ,這樣就可以輸入,也可以分別算 n1及n2的奇數位及偶數位
就是給 d1 n1 d2 n2 為11 90123456789 10 123456789 就是問 901234567890123456789
是否可被 11 整除? {n2的前面有0時不會讀入,所以要判斷d2的位數自己算前導0的位數}
變化的會由以下所公佈的四個練習題中抽2個(但類似而已)
變化一:運算結果最大值
給三個數字 a,b,c ,只有+、* 兩種運算及一個括號,問下列運算式哪一個?最大?
(a+b)*c、a+(b*c)、(a*b)+c、a*(b+c)
變化二:糖果紙換糖果
一顆糖果3元,5張糖果紙可換1顆,又3張糖果紙可換1元,而且如果有4張糖果紙的話可向老闆先借1張換1顆馬上吃再還,請問有 n 元最多可以吃到幾顆糖果?
變化三:費氏數列
f0=1、f1=1、f2=2、f3=3、f4=5、f5=8、f6=13、...、f20=10946、...、
f50=20365011074、...、f70=308061521170129、...、f90=4660046610375530309
輸入 n , 0<=n<=90,請問 fn的值
變化四:判斷可否被11整除
如果是long long int 可存範圍正整數 n <=2^63-1 = 9223372036854775807{約9.22*10^18}
比照a024所有位數和,但分奇數位的和odd及偶數位的和even,若odd-even可被11整除的話,則 n 也可被11整除。{這樣解題時只要加個if判斷是奇數位就加至odd、偶數位就加至even}
但如果n的位數超出19位數怎麼辦?假設n不超過30位數,為了可以使用long long整數讀,
我們將n平分為n1及n2兩部份,並且在n1及n2之前加d1、d2代表各幾位數
例如: n為901234567890123456789共有21位數將之分為11位及10位,則輸入 d1 n1 d2 n2
11 90123456789 10 123456789 ,這樣就可以輸入,也可以分別算 n1及n2的奇數位及偶數位
就是給 d1 n1 d2 n2 為11 90123456789 10 123456789 就是問 901234567890123456789
是否可被 11 整除? {n2的前面有0時不會讀入,所以要判斷d2的位數自己算前導0的位數}
2016年5月7日 星期六
a021~a025說明
a021 我討厭偶數
這題輸入一整數 n ,若偶則一直除2,直到奇數為止
while( n%2==0 ) n/=2; 是偶數就除
這題輸入一整數 n ,若偶則一直除2,直到奇數為止
while( n%2==0 ) n/=2; 是偶數就除
cout n ,不是偶數了才印
a022 細菌繁殖
輸入 n m , n 一直乘3,乘幾次才會>=m
設次數 cnt = 0;
while( n < m ) 當n<m繼續
{
++ cnt ; 次數+1
n *= 3; 每次乘3
}
cout 次數
a023 3N+1
輸入1個 n , 偶數除2,奇數*3+1,直到1為止,輸入的數及1也算,
輸入1個 n , 偶數除2,奇數*3+1,直到1為止,輸入的數及1也算,
含中間變化的數共出現幾個不同的數
設個數 cnt = 1; 輸入的數字算 1 個
while( n != 1 ) 不是 1 繼續
{
if( n%2 == 0 ) n/=2; 偶數 除2
else n = n*3+1; 奇數 *3+1
++cnt ; 計數+1
}
cout 個數
a024 所有位數和
輸入1個數 n 算出每位數的和,例 12345則和為 1+2+3+4+5 = 15
輸入1個數 n 算出每位數的和,例 12345則和為 1+2+3+4+5 = 15
設和 sum = 0;
while( n != 0 ) 每次取個位後除10,直到0為止
{
sum += ( n%10 ); //取個位數 將之加入和 sum內
n /= 10; // 除10 , 因 n 宣告為整數,小數會捨棄
}
cout sum
a025 數字倒轉
輸入1個數 n ,將其倒著印出,例 12345 印 54321,若1200只印21
類似a024但 sum需每次乘10
設定和 sum = 0;
while( n != 0 ) //和每次乘10後,加上原數的個位數
{ // 並每次將原數除10
sum = sum * 10 + ( n%10 ); //取個位數 倒著放
n /= 10; // 除10 , 因 n 宣告為整數,小數會捨棄
}
cout sum