- 積分
- 163
- 最後登入
- 1970-1-1
- 閱讀權限
- 50
- 積分
- 163
- 帖子
- 精華
升級
100%
|
本帖最後由 edisonx 於 2012-12-7 07:47 編輯
沒細看,不過很明顯有些地方可以化繁為簡。
- void printCard(int n){
- char *suitSymbol[4] = {"梅花","方塊","紅心","黑桃"};
- if(n%4==0){
- if(n%13==12)
- {printf("%sA ",suitSymbol[0]);}
- else if(n%13==9)
- {printf("%sJ ",suitSymbol[0]);}
- else if(n%13==10)
- {printf("%sQ ",suitSymbol[0]);}
- else if(n%13==11)
- {printf("%sK ",suitSymbol[0]);}
- else{printf("%s%d ",suitSymbol[0],n%13+2);}
- }
- else if(n%4==1){
- if(n%13==12)
- {printf("%sA ",suitSymbol[1]);}
- else if(n%13==9)
- {printf("%sJ ",suitSymbol[1]);}
- else if(n%13==10)
- {printf("%sQ ",suitSymbol[1]);}
- else if(n%13==11)
- {printf("%sK ",suitSymbol[1]);}
- else{printf("%s%d ",suitSymbol[1],n%13+2);}
- }
- else if(n%4==2){
- if(n%13==12)
- {printf("%sA ",suitSymbol[2]);}
- else if(n%13==9)
- {printf("%sJ ",suitSymbol[2]);}
- else if(n%13==10)
- {printf("%sQ ",suitSymbol[2]);}
- else if(n%13==11)
- {printf("%sK ",suitSymbol[2]);}
- else{printf("%s%d ",suitSymbol[2],n%13+2);}
- }
- else if(n%4==3){
- if(n%13==12)
- {printf("%sA ",suitSymbol[3]);}
- else if(n%13==9)
- {printf("%sJ ",suitSymbol[3]);}
- else if(n%13==10)
- {printf("%sQ ",suitSymbol[3]);}
- else if(n%13==11)
- {printf("%sK ",suitSymbol[3]);}
- else{printf("%s%d ",suitSymbol[3],n%13+2);}
- }
- }
複製代碼 我不確定你的 n<----> 牌面對應是怎樣,但若只是要單純的輸出,其實有更方便的方法。
- #include <stdio.h>
- void printCard(int n)
- {
- static const char SuitSymbol[4] = {5,4,6,3}; // 去查 ASCII-Code
- static const char * NumSymbol[13] = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
- printf("%c%2s ",SuitSymbol[n/13], NumSymbol[n%13]);
- }
- int main()
- {
- int i;
- for(i=0; i<52; ++i){
- if(i%13==0) puts("");
- printCard(i);
- }
- getchar();
- return 0;
- }
複製代碼 上面這是一種對照方式,以你的問題來講反而這種方式還不是較佳的對照。
試想一下,如果有種編碼模式,對應如下
黑桃 K --> 51 , 紅心 K --> 50 , 磚塊 K --> 49 , 梅花 K --> 48
黑桃 Q --> 47 , 紅心 Q --> 46 , 磚塊 Q --> 45 , 梅花 Q --> 44
....
黑桃 A --> 3+52=55 , 紅心 A ---> 2 + 52 = 54, 磚塊 A---> 1 + 52 = 53 , 梅花 A----> 0 + 52 = 52
大小和顯示是一瞬間結束的事,剩下的不明講,留著細思。
另外 srand((unsigned int)time(NULL));,這個不要常用,正常而言一份程式在「初始化」的時候做一次就行了。你可以試試下面這段 code
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- int main()
- {
- int i;
-
- srand( (unsigned) time(NULL) );
- for(i=0; i<10; ++i) printf("%d ", rand());
- puts("");
-
- srand( (unsigned) time(NULL) );
- for(i=0; i<10; ++i) printf("%d ", rand());
- getchar();
-
- return 0;
- }
複製代碼 會發現亂數序列一樣的機率非常非常高,原理我就不講了,總之盡可能在一份程式裡面, srand 只用一次,除了少數例外之情況與特定編譯器除外。
|
|