按规则来就可以 注意,可能有多副牌 一开始按一副牌处理的,一个数据也过不了 另外,还有 每次找两个相同的牌时,从3开始找,找不到再去1和2中找。
代码写的比较乱,大概是好久不写的缘故.
1 #include2 #include 3 #include 4 int N; 5 int num_count[20]; 6 int comp[5]; 7 int main() 8 { 9 10 while(scanf("%d",&N)!=EOF){ 11 int i; 12 memset(num_count,0,sizeof(num_count)); 13 for(i=0;i =2&&j!=2)||(j==2&&num_count[j]>=5)){ 33 flag=true; 34 num=j; 35 break; 36 } 37 } 38 if(!flag){ 39 for(j=1;j<=2;j++){ 40 if((num_count[j]>=2&&j!=2)||(j==2&&num_count[j]>=5)){ 41 flag=true; 42 num=j; 43 break; 44 } 45 } 46 } 47 if(flag){ 48 printf("2 2 2 %d %d\n",num,num); 49 } 50 else printf("My God\n"); 51 } 52 } 53 else{ 54 int j; 55 bool flag=false; 56 for(j=comp[0]+1;j<=13;j++){ 57 if(flag) 58 break; 59 if(num_count[j]>=3){ 60 int k; 61 for(k=3;k<=13;k++){ 62 if((num_count[k]>=2&&k!=j)||(k==j&&num_count[k]>=5)){ 63 printf("%d %d %d %d %d\n",j,j,j,k,k); 64 flag=true; 65 break; 66 } 67 } 68 if(!flag){ 69 int k; 70 for(k=1;k<=2;k++){ 71 if((num_count[k]>=2&&k!=j)||(k==j&&num_count[k]>=5)){ 72 printf("%d %d %d %d %d\n",j,j,j,k,k); 73 flag=true; 74 break; 75 } 76 } 77 } 78 } 79 } 80 if(!flag){ 81 for(j=1;j<=2;j++){ 82 if(flag) 83 break; 84 if(num_count[j]>=3){ 85 int k; 86 for(k=3;k<=13;k++){ 87 if((num_count[k]>=2&&k!=j)||(k==j&&num_count[k]>=5)){ 88 printf("%d %d %d %d %d\n",j,j,j,k,k); 89 flag=true; 90 break; 91 } 92 } 93 if(!flag){ 94 int k; 95 for(k=1;k<=2;k++){ 96 if((num_count[k]>=2&&k!=j)||(k==j&&num_count[k]>=5)){ 97 printf("%d %d %d %d %d\n",j,j,j,k,k); 98 flag=true; 99 break; 100 } 101 } 102 } 103 } 104 } 105 } 106 if(!flag) 107 printf("My God\n"); 108 } 109 } 110 }