# 程式培訓共筆 [toc] # a227: 河內之塔 > 題目連結: [a227 河內之塔](https://zerojudge.tw/ShowProblem?problemid=a227) ```c= #include <stdio.h> void ta(int n,char start,char temp,char end) { if(n<1) return; ta(n-1,start,end,temp); printf("move %d from %c to %c\n",n,start,end); ta(n-1,temp,start,end); } int main() { int n; while(EOF!=scanf("%d",&n)) { ta(n,'A','B','C'); } return 0; } ``` # a020: 身分證檢驗 > 題目連結: [a020 身分證檢驗](https://zerojudge.tw/ShowProblem?problemid=a020) ```c= #include <stdio.h> #include <stdlib.h> int check(char* id) { int i; int t[] = {10,11,12,13,14,15,16,17,34,18,19,20,21,22,35,23,24,25,26,27,28,29,32,30,31,33}; int ans=0; int j=t[id[0]-'A']; ans+=j/10+(j%10)*9; for (i=1;i<9;i++) { ans+=(id[i]-'0')*(9-i); } ans+=id[9]-'0'; return (id[1]=='1' || id[1]=='2') ? ((ans%10==0) ? 1 : 0) : 0; } int main() { char id[11]; while(EOF!=scanf("%s",id)) { printf("%s\n",check(id)?"real":"fake"); } return 0; } ``` # a022: 迴文 > 題目連結: [a022 迴文](https://zerojudge.tw/ShowProblem?problemid=a022) ```c= #include <stdio.h> #include <stdlib.h> int main() { char x=0; char in[1000]={0}; while(EOF!=scanf("%s",in)) { char ni[1000]={0}; int c=0,n=0; for(int i=0;i<1000;i++){ if(in[999-i]!=x) ni[c++]=in[999-i]; } for(int i=0;i<1000;i++) { if(in[i]!=ni[i]) { n=1; break; } } if(n) printf("no"); else printf("yes"); printf("\n"); for(int i=0;i<1000;i++) in[i]=0; } return 0; } ``` # d570: 神龍見首不見尾 > 題目連結: [d570 神龍見首不見尾](https://zerojudge.tw/ShowProblem?problemid=d570) ```c= #include <stdio.h> void SL(int n) { printf("%d\n",n); if(n/10>=1) SL(n/10); } int main() { int n; while(EOF!=scanf("%d",&n)) { SL(n); } return 0; } ``` # a417: 螺旋矩陣 > 題目連結: [a417 螺旋矩陣](https://zerojudge.tw/ShowProblem?problemid=a417) ```c= #include <stdio.h> int main() { int t,m,n,i,j,p,x,y,a; int dx[]={0,1,0,-1}; int dy[]={1,0,-1,0}; while(EOF!=scanf("%d",&t)){ while(t--) { int R[100][100]={0};x=0;y=0;a=1; scanf("%d%d",&n,&m); for(i=n-1;i>0;i-=2) { for(j=0;j<4;j++) { for(p=0;p<i;p++) { R[x][y]=a++; x+=dx[j]; y+=dy[j]; } } x++;y++; } if(n%2!=0) R[n/2][n/2]=a; for(int y=0;y<n;y++){ for(int x=0;x<n;x++){ if(m==1) printf("%5d",R[y][x]); else printf("%5d",R[x][y]); } printf("\n"); } printf("\n"); } } return 0; } ``` # a054: 電話客服中心 > 題目連結: [a054 電話客服中心](https://zerojudge.tw/ShowProblem?problemid=a054) ```c= #include <stdio.h> #include <stdlib.h> int main() { int i; char n[9]; while(EOF!=scanf("%s",n)) { int a[]={1,0,9,8,7,6,5,4,9,3,2,2,1,0,8,9,8,7,6,5,4,3,1,3,2,0}; int d[9]={0},num=0; for(i=0;i<9;i++) { d[i]=n[i]-48; num+=d[i]*(8-i); } num+=d[8]; num=(10-num%10)%10; for(i=0;i<26;i++) { if(a[i]==num) printf("%c",i+65); } printf("\n"); } return 0; } ``` # e969: 大吃大喝 (Big eater) > 題目連結: [e969: 大吃大喝 (Big eater)](https://zerojudge.tw/ShowProblem?problemid=e969) ```c= #include <stdio.h> #include <stdlib.h> void eat(int n,int m,int k,int t) { n-=(k ? 55 : 32); if(n>0) { printf("%d: Wayne %s, and now he has %d %s.\n",t,k ? "drinks a Corn soup" : "eats an Apple pie",n,n==1?"dollar":"dollars"); t+=m; k=(k+1)%2; eat(n,m,k,t); } else if(n==0) { printf("%d: Wayne %s, and now he doesn't have money.\n",t,k ? "drinks a Corn soup" : "eats an Apple pie"); } } int main() { int n,m,k; while(EOF!=scanf("%d%d%d",&n,&m,&k)) { if(k?n<55:n<32) {ˋㄇ printf("Wayne can't eat and drink.\n"); } else { eat(n,m,k,0); } } return 0; } ``` # a870: List Maker > 題目連結: [a870: List Maker](https://zerojudge.tw/ShowProblem?problemid=a870) ```c= #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct XXX NODE; struct XXX { char str[20]; NODE *p; }; void show(NODE *s) { while(s) { printf("%s ",s -> str); s = s -> p; } printf("\n"); } int main() { NODE *head,*x,*s; char A[10]; char N[20]; head = NULL; while(EOF != scanf("%s",A)) { if(strcmp(A,"ADD") == 0) { x = malloc(sizeof(NODE)); scanf("%s",x -> str); if(head == NULL) { x -> p = NULL; head = x; } else { s = head; while(s -> p != NULL) { s = s -> p; } x -> p = s -> p; s -> p = x; } } else if(strcmp(A,"INSERT") == 0) { x = malloc(sizeof(NODE)); scanf(" %s %s",x -> str,N); if(strcmp(head -> str,N) == 0) { x -> p = head; head = x; continue; } s = head; while(strcmp(s -> p -> str,N)) { s = s -> p; } x -> p = s -> p; s -> p = x; } else if (strcmp(A,"REMOVE") == 0) { char X[20]; NODE *del; scanf(" %s",X); if(strcmp(head -> str,X) == 0) { del = head; head = head -> p; free(del); continue; } s = head; while(strcmp(s -> p -> str,X)) { if(s -> p == NULL) break; s = s -> p; } del = s -> p; s -> p = s -> p -> p; free(del); } else { show(head); } } return 0; } ``` # a225: 明明愛排列 > 題目連結: [a225: List Maker](https://zerojudge.tw/ShowProblem?problemid=a225) ```c= #include <stdio.h> #include <stdlib.h> int comp(int a,int b) { if(a%10==b%10 && a>b || a%10<b%10) return 0; return 1; } int main() { int n,i,j,t,num[1000]; while(EOF!=scanf("%d",&n)) { for(i=0;i<n;i++) { scanf("%d",&num[i]); } for(i=n-1;i>=1;i--) { for(j=0;j<i;j++) { if(comp(num[j],num[j+1])) { t=num[j]; num[j]=num[j+1]; num[j+1]=t; } } } for(i=0;i<n;i++) { printf("%d ",num[i]); } printf("\n"); } return 0; } ```