ZJ20. 雀魂启动!
描述
输入描述
输入只有一行,包含13个数字,用空格分隔,每个数字在1~9之间,数据保证同种数字最多出现4次。输出描述
输出同样是一行,包含1个或以上的数字。代表他再取到哪些牌可以和牌。若满足条件的有多种牌,请按从小到大的顺序输出。若没有满足条件的牌,请输出一个数字0示例1
输入:
1 1 1 2 2 2 5 5 5 6 6 6 9
输出:
9
说明:
可以组成1,2,6,7的4个刻子和9的雀头示例2
输入:
1 1 1 1 2 2 3 3 5 6 7 8 9
输出:
4 7
说明:
用1做雀头,组123,123,567或456,789的四个顺子示例3
输入:
1 1 1 2 2 2 3 3 3 5 7 7 9
输出:
0
说明:
来任何牌都无法和牌C 解法, 执行用时: 1ms, 内存消耗: 368KB, 提交时间: 2021-04-25
#include<stdio.h> int main(){ int num[10]={0},n,k,a[10]={0},s=0,flag=0; for(int i=0;i<13;i++){ scanf("%d",&n); num[n]++; } for(int i=1;i<10;i++){ if(num[i]==4) continue; num[i]++; for(int j=1;j<10;j++){ for(int k=1;k<10;k++) a[k]=num[k]; s=i; int f=0; if(a[j]>=2){ a[j]-=2; for(int k=1;k<10;k++){ if(a[k]>=3){ a[k]-=3; f++; } while(a[k]>0&&a[k+1]>0&&a[k+2]>0){ a[k]--; a[k+1]--; a[k+2]--; f++; } if(a[k-1]>0&&a[k-1]<3&&k>1) break; } } if(f==4) break; s=0; } if(s!=0){ printf("%d ",s); flag=1; } num[i]--; } if(flag==0) printf("0"); printf("\n"); return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 376KB, 提交时间: 2020-07-22
#include<stdio.h> int main(){ int ans=0,a[10]={0},i,j,k,temp,b[12]={0},flag=0; for(i=0;i<13;i++){ scanf("%d",&temp); a[temp]++; } for(k=1;k<10;k++){ if(a[k]==4) continue; a[k]++; // printf("添加%d\n",k); for(i=1;i<10;i++){ for(j=1;j<10;j++) b[j] = a[j]; // for(j=1;j<10;j++) printf("%d ",b[j]); // printf("\n"); ans = k; int f=0; if(b[i]>=2){ b[i]-=2; // printf("雀头为%d\n",i); for(j=1;j<10;j++){ if(b[j]>=3) { b[j]-=3; f++; // printf("去掉3个%d,还剩下%d个\n",j,b[j]); } while(b[j]>0&&b[j+1]>0&&b[j+2]>0){ b[j]--; b[j+1]--; b[j+2]--; f++; // printf("%d %d %d\n",j,j+1,j+2); } if(b[j-1]>0&&b[j-1]<3&&j>1) break; } } if(f==4) break; ans = 0; } if(ans!=0){ printf("%d ",ans); flag=1; } a[k]--; } if(flag==0) printf("0"); printf("\n"); return 0; }