--- tags: Computer Experiments (C/C++) --- # 計算機實驗期末考 [TOC] ## L5 ### 1225 Digit Counting ```CPP= #include <iostream> using namespace std; int main(){ int n; while(cin>>n){ while(n--){ int input; cin>>input; int arr[10]={0}; for(int i=1; i<=input; i++){ int num = i; while(num>0){ arr[num%10]++; num/=10; } } for(int i=0; i<10; i++){ cout<<arr[i]<<" "; } cout<<endl; } } return 0; } ``` ### 12195 Jingle Composing ```CPP= #include <iostream> #include <string> using namespace std; int main(){ string s; while(cin>>s){ if(s == "*"){ break; } int beat = 0; int count = 0; for(int i=0; i<s.length(); i++){ switch(s[i]){ case 'W': beat += 64; break; case 'H': beat += 32; break; case 'Q': beat += 16; break; case 'E': beat += 8; break; case 'S': beat += 4; break; case 'T': beat += 2; break; case 'X': beat+= 1; break; case '/': if(beat == 64){ count++; } beat=0; break; } } cout<<count<<endl; } return 0; } /* W: 64 H: 32 Q: 16 E: 8 S: 4 T: 2 X: 1 */ ``` ### 11743 Credit Check ```CPP= #include <iostream> using namespace std; int main(){ int n; while(cin>>n){ while(n--){ int arr[16]={0}; for(int i=0; i<13; i+=4){ //0、4、8、12 int num; cin>>num; for(int j=i+3; j>=i; j--){ arr[j]=num%10; num/=10; } } int count = 0; for(int i=0; i<16; i++){ if(i%2==0){ arr[i]*=2; } while(arr[i]>0){ count += arr[i]%10; arr[i]/=10; } } if(count % 10 == 0){ cout<<"Valid"<<endl; }else{ cout<<"Invalid"<<endl; } } } return 0; } ``` ### 299 Train Swapping ```CPP= #include <iostream> using namespace std; int main(){ int n; int r; while(cin>>n){ while(n--){ cin>>r; int arr[r]; for(int i=0; i<r; i++){ cin>>arr[i]; } int count = 0; for(int i=r-1; i>0; i--){ for(int j=0; j<i; j++){ if(arr[j]>arr[j+1]){ int tmp=arr[j+1]; arr[j+1]=arr[j]; arr[j]=tmp; count ++; } } } cout<<"Optimal train swapping takes "<<count<<" swaps."<<endl; } } return 0; } ``` ## L6 ### 10591 Happy Number ```CPP= #include <iostream> #include <set> using namespace std; int main(){ int n; while(cin>>n){ for(int i=1; i<=n; i++){ int input; cin>>input; cout<<"Case #"<<i<<": "<<input; set<int> st; while(input != 1){ if(st.count(input)){ break; } st.insert(input); int sum = 0; while(input > 0){ sum+=(input%10)*(input%10); input/=10; } input = sum; } if(input==1){ cout<<" is a Happy number."<<endl; }else{ cout<<" is an Unhappy number."<<endl; } } } return 0; } ``` ### 10071 Back to High School Physics ```CPP= #include <iostream> using namespace std; int main(){ int v, t; while(cin>>v>>t){ cout<<2*v*t<<endl; } return 0; } ``` ### 488 Triangle Wave ```CPP= #include <iostream> using namespace std; int main(){ int n; while(cin>>n){ while(n--){ int a, b; cin>>a>>b; cout<<endl; for(int i=0; i<b; i++){ for(int j=1; j<=a; j++){ for(int k=1; k<=j; k++){ cout<<j; } cout<<endl; } for(int j=a-1; j>0; j--){ for(int k=j; k>0; k--){ cout<<j; } cout<<endl; } cout<<endl; } } } return 0; } ``` ### 10633 Rare Easy Problem ```CPP= #include <iostream> using namespace std; /* input: X=N-M N=10M+d X=9M+d M=(X-d)/9 求N的所有可能 */ int main(){ long long int X; while(cin>>X && X!=0){ for(int d=9; d>=0; d--){ if((X-d)%9==0){ long long int M = (X-d)/9; X=9*M + d; cout<<X+M<<" "; } } cout<<endl; } return 0; } ``` ## L7 ### 11455 Behold My quadrangle ```CPP= #include <iostream> #include <algorithm> using namespace std; int main(){ int n; while(cin>>n){ while(n--){ int arr[4]; for(int i=0; i<4; i++){ cin>>arr[i]; } sort(arr,arr+4); if(arr[0]==arr[1] && arr[2]==arr[3] && arr[0]==arr[3]){ cout<<"square"<<endl; }else if(arr[0]==arr[1] && arr[2]==arr[3]){ cout<<"rectangle"<<endl; }else if((arr[0]+arr[1]+arr[2])>arr[3]){ cout<<"quadrangle"<<endl; }else{ cout<<"banana"<<endl; } } } return 0; } ``` ### 00913 Joana and the Odd Numbers ```CPP= #include <iostream> using namespace std; int main(){ long long int n; while(cin>>n){ cout<<((((n+1) * (n+1) / 4) - 1) * 2 - 1) * 3<<endl; } return 0; } ``` ### 12650 Dangerous Dive ```CPP= #include <iostream> using namespace std; int main(){ int n; while(cin>>n){ int arr[n+1]={0}; int s; cin>>s; while(s--){ int back; cin>>back; arr[back]++; } bool flag = true; for(int i=1; i<=n; i++){ if(arr[i]==0){ cout<<i<<" "; flag = false; } } if(flag == true){ cout<<'*'<<endl; }else{ cout<<endl; } } return 0; } ``` ### 10409 Die game ```Cpp= #include <iostream> using namespace std; int main(){ int n; string s; while(cin>>n && n!=0){ int arr[3][4]; arr[0][0]=2; arr[1][0]=1; //top arr[2][0]=5; arr[1][1]=4; arr[1][2]=6; arr[1][3]=3; while(n--){ cin>>s; if(s=="north"){ int tmp = arr[2][0]; arr[2][0]=arr[1][2]; arr[1][2]=arr[0][0]; arr[0][0]=arr[1][0]; arr[1][0]=tmp; }else if(s=="east"){ int tmp = arr[1][3]; arr[1][3]=arr[1][2]; arr[1][2]=arr[1][1]; arr[1][1]=arr[1][0]; arr[1][0]=tmp; }else if(s=="south"){ int tmp = arr[0][0]; arr[0][0]=arr[1][2]; arr[1][2]=arr[2][0]; arr[2][0]=arr[1][0]; arr[1][0]=tmp; }else{ int tmp = arr[1][1]; arr[1][1]=arr[1][2]; arr[1][2]=arr[1][3]; arr[1][3]=arr[1][0]; arr[1][0]=tmp; } } cout<<arr[1][0]<<endl; } return 0; } /* 2 1 4 6 3 5 */ ``` ## L8 ### 11636 Hello World! ```CPP= #include <iostream> using namespace std; int main(){ int n; int x=1; while(1){ cin>>n; if(n<0)break; int cnt = 0; for(n--; n>0; n/=2){ cnt++; } cout<<"Case "<<x++<<": "<<cnt<<endl; } return 0; } ``` ### 10550 Combination Lock ```CPP= #include <iostream> using namespace std; int main(){ int start,a,b,c,ans; while(true){ cin>>start>>a>>b>>c; if(start+a+b+c == 0)break; ans = (40*2 + (40+start-a)%40 + 40 + (40+b-a)%40 + (40+b-c)%40)*9; cout<<ans<<endl; } return 0; } ``` ### 11678 Cards' Exchange ```CPP= #include <iostream> using namespace std; int main(){ int a, b,an=0,bn=0; while(true){ cin>>a>>b; if(a==0 && b==0) break; an=0; bn=0; int arrA[a]={0}; int arrB[b]={0}; for(int i=0; i<a; i++){ cin>>arrA[i]; if(i>0 && arrA[i]==arrA[i-1]) arrA[i-1]=0; } for(int i=0; i<b; i++){ cin>>arrB[i]; if(i>0 && arrB[i]==arrB[i-1]) arrB[i-1]=0; } for(int i=0, j=0; i<a&&j<b;){ if(arrA[i]==arrB[j]){ arrA[i]=0; arrB[j]=0; i++, j++; }else{ if(arrA[i]>arrB[j]){ j++; }else{ i++; } } } for (int i = 0;i < a; i++){ if (arrA[i] > 0) an++; } for (int i = 0;i < b; i++){ if (arrB[i] > 0) bn++; } if(an>bn) printf("%d\n",bn); else printf("%d\n",an); } return 0; } /* TA version #include <stdio.h> #include<stdlib.h> int main(){ int m,n;//卡牌長度 while(1){ scanf("%d %d",&m,&n); if(m+n==0)break;//卡牌數都為零就break int a[m],b[n];//卡牌陣列 int acnt=0,bcnt=0;//計算對方沒有卡牌的數量 int i,j; //Step1 將數列一樣的數設為零 for(int i=0;i<m;i++){ scanf("%d",&a[i]); if(i>0&&a[i]==a[i-1]) a[i-1]=0; } for(int j=0;j<n;j++){ scanf("%d",&b[j]); if(j>0&&b[j]==b[j-1]) b[j-1]=0; } //Step2 將兩數列相同的數設為零 for(int i=0,j=0;i<m&&j<n;){ if(a[i]==b[j]){ //相同就設為零並將索引值同時增加 a[i]=0; b[j]=0; i++;j++; } else{ if(a[i]<b[j])//將數字較小的數列索引值增加直到等於或大於 i++; else j++; } } //Step3 計算兩數列大於零的數字個數取較少的輸出 for(i=0;i<m;i++){ if (a[i]>0) acnt++; } for(i=0;i<n;i++){ if (b[i]>0) bcnt++; } if(acnt>bcnt) printf("%d\n",bcnt); else printf("%d\n",acnt); } return 0; } */ ``` ### 1583 Digit Generator ```CPP= #include <iostream> using namespace std; int main() { int t; cin>>t; int num; while(t--) { cin>>num; bool found=false; int limit; if(num<10) limit=9; else if(num<100) limit=18; else if(num<1000) limit=27; else if(num<10000) limit=45; else limit=60; int total; for(int i=num-limit;i<=num;i++) { int sum=i; total=sum; while(sum!=0) { total+=sum%10; sum/=10; } if(total==num) { found=true; total=i; break; } total=0; } if(found) cout<<total<<endl; else cout<<"0\n"; } return 0; } /* #include <iostream> using namespace std; int main(){ int n; int ans[100000]={0}; for(int i=1; i<100000; i++){ int tmp=i; //198 int m=i; //198 while(tmp>0){ m+=tmp%10; //198+1+9+8 = 216 tmp/=10; } //m=216, ans[m] = 198 if(i<ans[m] || ans[m]==0){ ans[m]=i; } } cin>>n; while(n--){ int input; cin>>input; cout<<ans[input]<<endl; } return 0; } */ ``` ## L9 ### 1594 Ducci Sequence ```CPP= #include <iostream> #include <math.h> using namespace std; int main(){ int n; cin>>n; while(n--){ int cnt; cin>>cnt; int arr[cnt]={0}; for(int i=0; i<cnt; i++){ cin>>arr[i]; } int times = 1000; while(times--){ int k=arr[0]; for(int i=0; i<cnt; i++){ int j=i+1; if(j==cnt){ arr[i]=abs(arr[i]-k); }else{ arr[i]=abs(arr[i]-arr[j]); } } } bool loop = false; for(int i=0; i<cnt; i++){ if(arr[i] != 0){ loop = true; break; } } cout<<endl; if(loop == true){ cout<<"LOOP\n"; }else{ cout<<"ZERO\n"; } } return 0; } ``` ### 11220 Decoding the Message ```CPP= #include<stdio.h> #include<stdlib.h> int main(){ int T;//test case int i,j; int site,k; char str[1000]; int ca=1; scanf("%d",&T); getchar(); getchar(); while(T--){ printf("Case # %d:\n",ca++); while(gets(str)){ if(str[0]=='\0') break; for(i=0,site=1,k=1;str[i]!='\0';i++,k++){ if(str[i]==' ')//遇到空格 表示換下一個單字 k=0; if(k==site){ printf("%c",str[i]); k++; site++; } } printf("\n"); } } return 0; } ``` ### 11349 Symmetric Matrix ```CPP= #include<cstdio> using namespace std; long long int matrix[100][100]; bool is_symmetric(int n) { for (int i=0;i<n;i++) for (int j=0;j<n;j++) if (matrix[i][j]!=matrix[n-i-1][n-j-1]) return false; return true; } int main() { int tc,c=1; scanf("%d",&tc); while (tc--) { int n,flag=1; char ch1,ch2; getchar(); scanf("N = %d",&n); for (int i=0;i<n;i++) for (int j=0;j<n;j++) { scanf("%lld",&matrix[i][j]); if (matrix[i][j]<0) flag=0; } if (flag && is_symmetric(n)) printf("Test #%d: Symmetric.\n",c++); else printf("Test #%d: Non-symmetric.\n",c++); } return 0; } ``` ### 11541 Decoding ```Cpp= ``` ## L10 ### 11677 Alarm Clock ```CPP= #include <iostream> using namespace std; int main(){ int h1, m1, h2, m2; while(cin>>h1>>m1>>h2>>m2){ if(h1==0 && m1==0 && h2==0 && m2==0){ break; } int ans = ((h2*60+m2)-(h1*60+m1)+1440)%1440; cout<<ans<<endl; } return 0; } ``` ### 11417 GCD ```CPP= #include <iostream> using namespace std; int gcd(int a, int b){ if(b==0){ return a; }else{ return gcd(b, a%b); } } int main(){ int n; while(cin>>n){ if(n==0){ break; } int ans = 0; for(int i=1; i<n; i++){ for(int j=i+1; j<=n; j++){ ans+=gcd(i,j); } } cout<<ans<<endl; } return 0; } ``` ### 10268 498bis ```CPP= ``` ### 263 Number Chains ```CPP= ```