# 2022 TTU 程設 Lab 12 ## Lab 12-1.c ```clike= #include <stdio.h> char week[7]="SMTWTFS"; char month_name[12][5]={"Jan.","Feb.","Mar","Apr.","May.","Jun.","Jul.","Oct","Sep.","Nov.","Dec."}; int is_lunar(int year){ if(year%4==0&&year%100!=0||year%400==0) return 1; else return 0; } int month_days(int year,int month){ if(month==0) return 0; int table[12]={1,-1,1,0,1,0,1,1,0,1,0,1}; if(month==2) return (is_lunar(year))?29:28; if(table[month-1]) return 31; else return 30; } int year_days(int year,int month){ int total=0; for(int i=0;i<month;i++){ total+=month_days(year,i+1); } return total; } int from_2006(int year){ int total=0; for(int i=2006;i<=year;i++){ total+=year_days(i,12); } return total; } int year_shift_days(int year){ int delta=from_2006(year-1); return delta%7; } int month_shift_days(int year,int month){ int shifted=year_shift_days(year); shifted+=year_days(year,month-1); return shifted%7; } int calander[6][7]={0}; int main(){ int year; printf("Input a year(2006~2013): "); scanf("%d",&year); if(year>2013&&year<2006) return 0; printf("\n%d is %sa leap year\n",year,(is_lunar(year))?"":"not "); for(int i=0;i<12;i++){ // 印出年月 printf("%s %d\n",month_name[i],year); // 印出星期 for(int i=0;i<7;i++){ printf("%2c ",week[i]); } printf("\n"); int j=0; int shifted_m=month_shift_days(year,i+1); for(j=0;shifted_m!=0&&j<shifted_m;j++){ printf("%2s "," "); } for(;j<month_days(year,i+1)+shifted_m;j++){ if(j>0&&j%7==0) printf("\n"); printf("%2d ",j+1-shifted_m); } printf("\n\n"); } return 0; } ``` ## Lab 12-2.c ```clike= #include <stdio.h> #include <stdlib.h> #include <time.h> void arrcpy(int a[],int b[],int len){ for(int i=0;i<len;i++) a[i]=b[i]; } int is_exist(int target,int arr[],int len){ for(int i=0;i<len;i++){ if(arr[i]==target) return 1; } return 0; } void rand_deck(int deck[],int len){ for(int i=0;i<len;i++){ int t_rand=1+rand()%len; while(is_exist(t_rand,deck,i)){ t_rand=1+rand()%len; } deck[i]=t_rand; } } void print_arr(int arr[],int begin,int len){ for(int i=begin;i<len;i++){ printf("%3d",arr[i]); } } void print_deck(int deck[],int len){ int mid=len/2; print_arr(deck,0,mid); printf(" ||"); print_arr(deck,mid,len); printf("\n"); } void shuffle(int deck[],int len){ int temp[len]; int mid=len/2; int c=0; for(int i=0,c=0;i<len;i+=2,c++){ temp[i]=deck[c]; temp[i+1]=deck[mid+c]; } for(int i=0;i<len;i++) deck[i]=temp[i]; } int is_same(int a[],int b[],int len){ for(int i=0;i<len;i++){ if(a[i]!=b[i]) return 0; } return 1; } int deck[18]; int main(){ srand(time(NULL)); int n; printf("Input a num(0-9): "); scanf("%d",&n); while(n<1||n>9){ printf("Input a num(0-9): "); scanf("%d",&n); } int deck_size=2*n; rand_deck(deck,deck_size); int ori[deck_size]; arrcpy(ori,deck,deck_size); print_deck(deck,deck_size); shuffle(deck,deck_size); print_deck(deck,deck_size); while(!is_same(ori,deck,deck_size)){ shuffle(deck,deck_size); print_deck(deck,deck_size); } return 0; } ```