2016年4月30日 星期六

a016~a020 說明


接下來的題目解題說明,將省略變數宣告及輸入

而且輸出也將以文字說明,重點放在  解題邏輯

要自己上JUDGE測測看,才不會出現語法的錯誤哦

a016 閏年判斷
這題輸入一整數 n ,判斷是否閏年{400的倍數+4的倍數但非100倍數}
if( n%400==0) cout 閏年
else if(n%100==0) cout 非
else if(n%4==0) cout 閏年
else cout  
前三行可寫成一行:if( (n%400==0) || (n%100!=0 && n%4==0) ) 是

a017 成績等第
這題輸入成績 n ,轉等弟 規則:  90分(含)~100分(含)為A等  ,  
80分(含)~90分(不含)為B等 , 70分(含)~80分(不含)為C等
60分(含)~70分(不含)為D等 , 不滿60分者為E等
if( n>=90 ) cout A等         因題目沒規定<0或>100的情況,假設不會有
else if( n>=80) cout B等
else if( n>=70) cout C等
else if( n>=60) cout D等
else cout  E

a018 下午茶時間
這題輸入時H, 分M,看是否在14:20(含)~16:40(含)之間
將一天全轉為分鐘看是不是在14*60+20 ~ 16*60+40之間
n = h*60m
if( n>=860 && n<=1000) cout 是
else cout  

a019 刮刮樂兌獎(一)
每張刮刮樂上面有兩個0~9的數字。   如果第1個數是奇數,則可以得到100元。
若第2個數是除3餘2,則可得200元。若第1和第2數字相同,則可以得到50元。
以上三種得獎方式,你只能選擇獎金最高的一種來領取。 輸入 a,b ,宣告獎 g=0
從最高獎金的條件開始判斷起
if(b%3==2) g=200
else if(a%2==1) g=100
else if(a==b) g=50
cout g

a020 刮刮樂兌獎(二)
同a019的規則, 但各獎可累加, 最多350元, 輸入 a,b ,宣告獎 g=0
每個獎項分開判斷及累加
if(b%3==2) g += 200
if(a%2==1) g += 100

if(a==b) g += 50
cout g

a011~a015說明

接下來的題目解題說明,將省略變數宣告及輸入
而且輸出也將以文字說明,重點放在  解題邏輯

a011 及格
這題輸入一整數 n ,判斷是否及格
if(n>=60) cout 及格
else cout 不及格

a012 奇數與偶數
這題輸入一整數 n ,判斷偶數或奇數
if(n%2==0) cout 偶數
else cout 奇數

a013 成績分佈
這題輸入一整數 n ,判斷是否有在75~90之間(含)
if(n>=75 && n<=90) cout 有
else cout 沒有

a014 貨比三家
這題輸入三整數 a,b,c ,印出最小值d
設 d=a
if(b<d) d=b
if(c<d) d=c
cout d

a015 大小關係
這題輸入二整數 a,b判斷是 = 或 > 或 <
使用 if .. else if  ... else
if(a==b) cout a=b 注意 印  a   "="   b  三個資料 <<a <<"=" <<b 並換行
else if(a>b) cout a>b
else cout a<b


a006~a010說明

a006 時間換算()
這題一樣輸入兩個數 h,m代表時、分,計算後輸出
int h,m; 宣告變數
cin >> h >>m;  輸入兩數
cout << h*60+m << endl;  h60+m


a007 時間換算()
這題輸入一個數m代表總分鐘數,整除60可得時,餘則為分
int m; 宣告變數
cin >>m; 輸入總分鐘數
cout << m/60 <<" " <<m%60 << endl;  中間有空1格哦


a008 溫度轉換
這題輸入一個數c代表攝氏,轉為華氏,注意乘浮點數9.0才會保留
float c; 宣告變數
cin >>c;  輸入攝氏
cout << c*9/5+32 << endl;  若 c 整數,計算結果也會是整數,除非 *9.0


a009 團購力量大
買10個送1個,所以每買11個才享受得到1個優惠
int n; 宣告變數
cin >>n;  輸入購買數量
cout << 100*(n-n/11) << endl;  每11個優惠1個,減掉優惠就是要付費的數量



a010 年齡推算
買10個送1個,所以每買11個才享受得到1個優惠
int g, G, b, p; 小綠、大綠、阿藍、阿紫
cin >>g;  輸入小綠的年齡
G=g+3;  比小綠大3
 b=g*2-5; 小綠的2倍減5
  p = b%100/10*10 + G%10 ; 十位數與阿藍同, 個位數與大綠同
  cout << p << endl; 阿紫的年齡輸出








a001~a005說明

a001題目中已給參考

a002: This is a book
 直接以 cout 印三行,
cout語法:
cout << 資料流1 << 資料流 2 ... << 資料流n ;
資料流可以是字串、變數、運算式…, 本題只用到字串常數,以""框住要印的資料

<< endl是換行
cout <<"This is a book." << endl; 三行,每行使用一個 cout 
cout <<"That is a pen." << endl;  每一行也皆有 endl換行
cout <<"I am a student." << endl;

a003: 許願
有一些字元是特殊用途,需以 \註明要印而非特殊用
這題有雙引號、反斜線
cout << "^_^" << endl;
cout << "\"o\"" << endl;  印"前加 \
cout << "\\^o^/" << endl;  印\前也要加 \

a004: 民國與西元的換算
這題使用 cin輸入資料存至變數 n,再將n運算後輸出,使用 變數前需宣告
int n; 使用前需宣告

cin >> n;    輸入 >>傳至變數
cout << n+1911 << endl; 將n加1911後再輸出 

a005: 矩形面積
這題使用 cin輸入兩個資料存至變數 a,b,再將a乘b後輸出
int a,b; 一行宣告兩個,以逗號隔開

cin >> a >> b;    輸入兩個資料,以兩個 >>傳入變數
cout << a*b << endl; 將 a乘b 後再輸出


河內塔

河內塔 (n ,A,B,C) = (n-1,A,C,B)  +  n:AC  +  (n-1,B,A,C)
(說明一)
要將n個環由A塔搬至C塔,B塔可以暫放,需 2n-1步,假設n=415
1~7步:將(123)A搬至B  (說明二再拆解)
8步:將(4)A搬至C
9~15步:將(123)B搬至C  (這裏有9~15步當練習吧)
(說明二)
以上第1~7步:將(123)A搬至BC當暫放區,即n=3分成三部份
1~3步:將(12)A搬至C   (說明三再拆解)
4步:將(3)A搬至B
5~7步:將(12)C搬至B   (說明四再拆解)
(說明三)
以上第1~3步:將(12)A搬至CB當暫放區,即n=2分成三部份
1步:將(1)A搬至
2步:將(2)A搬至C
3步:將(1)B搬至C
(說明四)
以上第5~7步:將(12)C搬至BA當暫放區,即n=2分成三部份
5步:將(1)C搬至
6步:將(2)C搬至B
7步:將(1)A搬至B
C++解出
4
1:1A->B
2:2A->C
3:1B->C
4:3A->B
5:1C->A
6:2C->B
7:1A->B
8:4A->C
9:1B->C
10:2B->A
11:1C->A
12:3B->C
13:1A->B
14:2A->C
15:1B->C
 
程式碼如下
#include <iostream>
using namespace std;
int stp=0; //總步數
void hanoi(int n, char A, char B, char C)
{
        if(n==1) cout <<++stp<<":"<<n<<A<<"->"<<C<<endl;
        else
        {
                hanoi(n-1,A,C,B);
                cout <<++stp<<":"<<n<<A<<"->"<<C<<endl;
                hanoi(n-1,B,A,C);
        }
    return;
}
int main( void )
{
        int n;
        cin >> n;
        hanoi(n, 'A' , 'B', 'C');

}