# 期末考練習A ## A1-找迴文 ```.cpp #include<iostream> using namespace std; int reverseNumber(int number){ int renum=0; while(number!=0){ renum=renum*10+number%10; number/=10; } return renum; } int main(){ for(int i=0;i<2;i++){ int n,sum,rec=1; cin >> n; sum=n+reverseNumber(n); while(sum!=reverseNumber(sum)){ sum=sum+reverseNumber(sum); rec++; } cout << "Total:" << rec << endl; cout << "Result:" << sum << endl; } } ``` 範例輸入: 265 750 範例輸出: Total:5 Result:45254 Total:3 Result:6666 ## A2-出現次數最多的數 ```.cpp #include<iostream> using namespace std; int main(){ int ans[10]={},n=0,max=0; for(int i=0;i<10;i++){ cin >> n; ans[n]++; } for(int i=0;i<10;i++){ if(ans[i]>max){ max=ans[i]; } } cout << "Result: "; for(int i=0;i<10;i++){ if(ans[i]==max){ cout << i << " "; } } } ``` ## A3-不重複的一維陣列 ```.cpp #include<iostream> using namespace std; bool check(int ans[],int n){ for(int i=0;i<5;i++){ if(ans[i]==n){ cout << "Please re - enter since the added number is repeated:" << endl; return true; } } } int main(){ int ans[5]={},n,c; while(ans[4]==0){ cin >> n; if(check(ans,n)==0){ ans[c]=n; c++; } } for(int i=0;i<5;i++){ cout << ans[i]; } } ``` 範例輸入: 7 1 7 6 1 3 6 8 範例輸出: Please re - enter since the added number is repeated: Please re - enter since the added number is repeated: Please re - enter since the added number is repeated: 7 1 6 3 8 ## A4-成績的刪減及新增 ```.cpp #include<iostream> using namespace std; void Forward(int arr[],int count,int f){ for(int i=0;i<count;i++){ if(i==f){ arr[i]=0; } else if(i>f){ arr[i-1]=arr[i]; arr[i]=0; } } } void Backward(int arr[],int count,int b,int score){ for(int i=count-1;i>=b;i--){ arr[i+1]=arr[i]; arr[i]=0; } arr[b]=score; } void Print(int arr[], int count){ for(int i=0;i<count;i++){ cout << arr[i] << ' '; } cout << endl; } int main(){ int arr[30]={},n,f,b,score; cin >> n; for(int i=0;i<n;i++){ cin >> arr[i]; } cin >> f; Forward(arr,n,f); Print(arr, n); cin >> b >> score; Backward(arr,n,b,score); Print(arr, n); } ``` 範例輸入: 15 90 92 85 75 74 73 60 66 19 0 66 67 89 63 40 9 9 60 範例輸出: 90 92 85 75 74 73 60 66 19 66 67 89 63 40 0 90 92 85 75 74 73 60 66 19 60 66 67 89 63 40 ## A5-函式f(n)=n的所有位數相加,重複f(n)直到結果不變(使用遞迴) ```.cpp #include<iostream> using namespace std; void f(int n){ int sum=0; while(n!=0){ sum+=n%10; n/=10; } if(sum>9){ f(sum); } else{ cout << sum; } } int main(){ int n; cin >> n; f(n); } ``` 範例輸入: 876543 範例輸出: 6 ## A6-大十字 ```.cpp #include<iostream> using namespace std; int main(){ int room[20][20]={},r,c,stdr,stdc; cin >> r >> c >> stdr >> stdc; for(int i=0;i<r;i++){ for(int j=0;j<c;j++){ if(i==stdr||j==stdc){ room[i][j]=1; } } } room[stdr-1][stdc-1]=1; room[stdr-1][stdc+1]=1; room[stdr+1][stdc-1]=1; room[stdr+1][stdc+1]=1; room[stdr][stdc]=0; for(int i=0;i<r;i++){ for(int j=0;j<c;j++){ cout << room[i][j] << " "; } cout << endl; } } ``` 範例輸入1: 5 5 2 2 範例輸出1: 0 0 1 0 0 0 1 1 1 0 1 1 0 1 1 0 1 1 1 0 0 0 1 0 0 ## A7-根據大樓剩餘層數,判斷刑期 ```.cpp #include<iostream> using namespace std; int main(){ int Long,width,ammo; int place_l,place_w; int year=0; cin>>Long>>width; cin>>ammo; int set[Long][width]={0}; for(int i=0;i<Long;i++){ for(int j=0;j<width;j++){ set[i][j]=101; } } for(int i=1;i<=ammo;i++){ cin>>place_l>>place_w; for(int x=place_l-1;x<=place_l+1;x++){ for(int y=place_w-1;y<=place_w+1;y++){ if(x>=0&&y>=0&&x<Long&&y<width) set[x][y]-=5; } } } for(int i=0;i<Long;i++){ for(int j=0;j<width;j++){ if(set[i][j]<101&&set[i][j]>=50){ year+=87; } else if(set[i][j]<0){ year+=6666; } else if(set[i][j]<50&&set[i][j]>0){ year+=777; } } } cout<<year<<endl; } ``` ## A8-輸出數量為質數的英文字 ```.cpp #include<iostream> using namespace std; int main(){ int n; char en; cin >> n; int enarr[26]={}; for(int i=1;i<=n;i++){ cin >> en; enarr[(int)en%65]++; } for(int i=0;i<26;i++){ int num=0; for(int j=1;j<=enarr[i];j++){ if(enarr[i]%j==0){ num++; } } if(num==2){ cout << (char)(i+65) << " "; } } } ``` 範例輸入: 76 N F Z H E W H Q S L H E P E P U Y H E N Q Z X V B R X A B Z Q N V P A G S H W W L H C K Y R B W H Y G L D D I Q J M W P R J W F I P C P M C G C U N Y S 範例輸出: A B D F G H I J L M R S U V X Z # 期末考練習B ## B1-幾A幾B ```.cpp #include<iostream> using namespace std; int n; void guessNumber(int ans, int num[]) { for (int i = 0; i < n; i++){ int a=0,b=0; for(int j=1000;j!=0;j/=10){ for(int k=1000;k!=0;k/=10){ if(num[i]/k%10==ans/j%10){ if(j==k){ a++; } else{ b++; } } } } cout << a << 'A' << b << 'B' << endl; } } int main() { int ans, num[100]; cin >> ans; cin >> n; for (int i = 0; i < n; i++) cin >> num[i]; guessNumber(ans, num); } ``` 範例輸入: 1536 3 1234 2345 1536 範例輸出: 2A0B 0A2B 4A0B ## B2-取平方數的百位數和十位數直到一樣 ```.cpp #include<iostream> using namespace std; void funA(int num){ int numd=num*num; int nn=0; for(int i=100;i>=10;i/=10){ nn+=numd/i%10*i/10; } if(nn!=num){ cout << " " << nn; funA(nn); } else{ cout << nn; } } int main() { int num1, num2; cin >> num1; cin >> num2; cout << num1; funA(num1); cout << endl; cout << num2; funA(num2); return 0; } ``` 範例輸入1: 43 38 範例輸出1: 43 84 5 2 0 0 38 44 93 64 9 8 6 3 0 0 ## B3-羅馬數字 ```.cpp #include<iostream> #include<cmath> using namespace std; int main(){ int num1,num2,n; cin >> num1 >> num2; n=abs(num1-num2); for(int i=1000;i!=0;i/=10){ if(n/i%10!=0){ switch(i){ case 1000: for(int j=1;j<=n/i%10;j++){ cout << "M"; } break; case 100: if(n/i%10==9){ cout << "CM"; } else if(n/i%10==4){ cout << "CD"; } else{ if(n/i%10<5){ for(int j=1;j<=n/i%10;j++){ cout << "C"; } } if(n/i%10>=5){ cout << "D"; for(int j=1;j<=n/i%10-5;j++){ cout << "C"; } } } break; case 10: if(n/i%10==9){ cout << "XC"; } else if(n/i%10==4){ cout << "XL"; } else{ if(n/i%10<5){ for(int j=1;j<=n/i%10;j++){ cout << "X"; } } if(n/i%10>=5){ cout << "L"; for(int j=1;j<=n/i%10-5;j++){ cout << "X"; } } } break; case 1: if(n/i%10==9){ cout << "IX"; } else if(n/i%10==4){ cout << "IV"; } else{ if(n/i%10<5){ for(int j=1;j<=n/i%10;j++){ cout << "I"; } } if(n/i%10>=5){ cout << "V"; for(int j=1;j<=n/i%10-5;j++){ cout << "I"; } } } break; } } } } ``` 範例輸入: 2000 2 範例輸出: MCMXCVIII ## B4-各班成績取中位數,再取一次中位數 ```.cpp #include <iostream> using namespace std; template<class T> void sort(T stu[], int y) { for(int i = 0; i < y-1; i++) for(int j = i+1; j < y; j++) if(stu[i] > stu[j]) swap(stu[i], stu[j]); } int main() { int cnum,midnum=0; float cmid[100]={}; cin >> cnum; for(int i=1;i<=cnum;i++){ int snum; float score[100]={}; cin >> snum; for(int j=0;j<snum;j++){ cin >> score[j]; } sort(score,snum); if(snum%2==0){ cmid[midnum]=(score[snum/2-1]+score[snum/2])/2; midnum++; } else{ cmid[midnum]=score[snum/2]; midnum++; } } sort(cmid,midnum); if(midnum%2==0){ cout << (cmid[midnum/2-1]+cmid[midnum/2])/2; } else{ cout << cmid[midnum/2];; } return 0; } ``` 範例輸入1: 3 4 60 68 61 60 5 70 72 71 68 82 5 60 60 60 60 60 範例輸出1: 60.5 # 期末考練習C ## C1-呼叫指標從特定位置輸出特定數量字元 ```.cpp #include <iostream> #include <string> using namespace std; void print(char *chr, int start, int print_size) { for(int i=start;i<start+print_size;i++){ cout << chr[i]; } } int main() { char n[1000]={}; char *chr=&n[0]; int st,psize; cin >> n; cin >> st >> psize; print(chr,st,psize); return 0; } ``` 範例輸入1: abcdef 1 4 範例輸出1: bcde ## C2-透過指標計算總合 ```.cpp #include <iostream> using namespace std; int sum(int *arr, int arr_size) { int ans=0; for(int i=0;i<arr_size;i++){ ans+= *(arr+i); } return ans; } int main() { int arr_size; cin >> arr_size; int *arr = new int[arr_size]; for(int i=0;i<arr_size;i++){ cin >> arr[i]; } cout << sum(arr,arr_size); } ``` 範例輸入: 6 1 3 5 7 9 11 範例輸出: 36 ## C3-指標中的質互換 ```.cpp #include <iostream> using namespace std; void swap(int* x,int* y){ int hold; hold=*x; *x=*y; *y=hold; } void print(int a, int b, int c) { cout << a << "," << b << "," << c << endl; } int main() { int a,b,c; cin >> a >> b >> c; print(a,b,c); swap(a,b); print(a,b,c); swap(a,c); print(a,b,c); } ``` 範例輸入: 1 2 3 範例輸出: 1,2,3 2,1,3 3,1,2