---
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=
```