# 程式設計(期中測驗)
## 第一題:吉祥數字
### 題目:
有一個小村落認為 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;
}
```