# 程式設計(期中測驗) ## 第一題:吉祥數字 ### 題目: 有一個小村落認為 7 是一個非常吉祥的數字,所以他們的數字比較皆 環繞在 7的身上。 ● 今天若有兩數字,則兩數字中可以被 7 整除的比較大,如 140 比 52大,140為最吉祥數字 ● 可以被 7 整除的數字中取 70 的餘數較大的比較大,如 28 會比 14 大,28為最吉祥數字 ● 不能被 7 整除的數字中取 77 的餘數較小的比較大,如 15 會比 16 和 68 大,15為最吉祥數字 寫一個程式,求出這些數字中的最吉祥數字 輸入格式: 輸入為一連串的數字,範圍介在 1 至 1000 之間,以數字 0 代表這一串 數字的尾端,最多不超過 10 個數字,且 0 不列入須比較的範圍。 輸出格式: 依照該村落的數字比較大小規則,輸出給定數列中最大的數字,若有 多個最大的數字,請輸出最前面那一個。 範例: 輸入 7 14 28 0 ⇒輸出 28 輸入 7 77 777 0 ⇒輸出 7 輸入 52 140 0 ⇒ 輸出 140 輸入 15 16 68 0 ⇒ 輸出 15 ### 程式: ```cpp= #include<iostream> using namespace std; int main(){ int k,n=0,tag=0; cin>>k; k=7; n=k; while(k!=0){ if(k%7==0) { if(tag==0) n=k; else if(k%70>n%70) n=k; tag=1; } else if (tag==0) if(k%77<n%77) n=k; cin>>k; } cout<<n; } ``` ## 第二題:超級細菌繁殖 ### 題目: 超級細菌王每過一天就會分裂出一個超級細菌,而分裂出來的超級細跟超 級細菌王一樣,每過一天也會再分裂出另一個超級細菌。 假設原先有一個超級細菌王,過了一天之後,就會變成一個超級細菌王以 及一個超級細菌; 過了兩天之後,超級細菌王會再分裂出一個超級細菌,另一個超級細菌也 會再產生另一個超級細菌,所以過了兩天之後,就會有一個超級細菌王以 及三個超級細菌。 寫一個程式,給定現在超級細菌王跟超級細菌的比例,計算出從開始到現 到現在,經過了幾天? 輸入格式: 輸入有一行,含有兩個整數 �� 和 ��,以一個空白隔開, 代表超級細菌王的數量:超級細菌的數量為=> N:T 輸出格式: 推算經過了幾天. 範例: 輸入 1 3 ⇒輸出 2 輸入 4 28 ⇒輸出 3 ### 程式: ```cpp= #include<iostream> using namespace std; int main(){ int n=0,t=0; cin>>n>>t; int ans=0; int total=0; while(total<t) { total=total*2+n; ans+=1; } cout<<ans; } ``` ## 第三題:神奇數字 ### 題目: 使用者輸入一個四位數字,請你幫他計算出屬於他的神奇數字。 條件如下: ● 如果是奇數,那麼千位數字和個位數字相加總和,再乘以百位數 字和十位數字相加總合。 ● 如果是偶數,那麼千位數字和百位數字相乘,以及個位數字與十 位數字相乘,最後把二個相乘結果相加。 ○ 若此條件有任一相乘結果為0,則神奇數字為所有數字相 加. 神奇數字不可以超過三位數字,即以上條之超過三位數字的話,只取 後面二位數字(十位字數和個位數字),神奇數字可以是二位數或一位 數。 若使用者輸入數字不是四位數字,必須重新輸入,直到輸入正確四位 數字為止,即只可以輸入1000 ~9999之間的數字,程式必須加以判斷 並要求輪入正確為止。 例如: 1746 : (1x7)+(4x6)=7+24=31 1745:(1+5)x(7+4)=6x11=66 9999:(9+9)x(9+9)=18x18=324 %100 =24 1000:1+0+0+0=1 2002:2+0+0+2=4 請你幫忙計算以下情況的神奇數字: 輸入格式: 1000 1746 1745 2002 9999 輸出格式: 1 31 66 4 24 ### 程式: ```cpp= #include<iostream> using namespace std; int main(){ int n,a,b,num; cin>>n; while(n>9999||n<1000) { cin>>n; } if (n%2!=0) { a=n/1000+n%10; b=n%1000/100+n/10%10; num=a*b; } else { a=(n/1000)*(n%1000/100); b=(n%10)*(n/10%10); if(a==0||b==0) { a=n/1000+n%10; b=n%1000/100+n/10%10; num=a+b; } else num=a+b; } num=num%100; cout<<num; } ``` ## 第四題:青蛙跳躍 ### 題目: 有一隻青蛙每次可以跳躍不一樣的距離, 假設一次可以跳躍的距離為 5 或 8,若目的地距離 97,那麼它可以藉 由跳五次距離 5 和九次距離 8 ,剛好到達目的地; 但若牠的目的地距離在11 則無法順利到達目的地(無法剛好跳躍到剛 好的目的地) 輸入格式 輸入只有一行,包含三個整數 N、M 和 D 。 N 和 M 表示青蛙可以跳躍的距離,D 表示目的地和牠的距離 輸出格式 若青蛙可以剛好到達目的地則輸出 YES,否則輸出NO 範例: 輸入 5 8 97 ⇒輸出 YES 輸入 5 4 1 ⇒輸出 NO 輸入 17 31 147 ⇒輸出 NO ### 程式: ```cpp= #include<iostream> using namespace std; int main() { int N,M,D; int temp,flag=0; cin>>N>>M>>D; for(int i=0;i<=(D/N);i++) { int remain=D-i*N; if(remain%M==0) { flag=1; break; } } if(flag==1) cout<<"Yes"<<endl; else cout<<"No"<<endl; } ``` ## 第五題:ASCII 編碼計算 ### 題目: 一個文字統計器,希望能統計出文章中的英文字母大小寫各有 多少?請你寫一個程式,幫忙計算。 輸入格式: 由使用者一一輸入文字訊息,包含各種特殊符號、英文字母和阿拉伯數字 ,最後輸入’=’鍵後結束。 輸出格式: 依序輸出英文字母(大小寫要分開計算,前面為大寫,後面小寫),各有多 少。 範例: 輸入 We are Rssh Senior High School students.= 輸出 5 28 輸入 1234+*5678ab= 輸出 0 2 輸入 There are 45 cars ,18 motors and 100 biks.= 輸出 1 24 ### 程式: ```cpp= #include <iostream> using namespace std; int main() { int A_count=0,a_count=0,n_count=0; char i; cin>>i; for(;;) { if(i=='=') break; if(i>='A'&&i<='Z') A_count++; else if (i>='a'&&i<='zFFDFY') a_count++; else if (i>='0'&&i<='9') n_count++; cin>>i; } cout<<A_count<<" "<<a_count<<" "<<n_count; return 0; } ```