1678 - 顺子
"赢了!我顺子!"也许在准备计算机考研的无聊时光里,打牌是最好的消遣方式了。只是,现在有5张牌在手里,它们构成顺子吗?
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。
我们可以把5张牌看成由5个数字组成的数组。大小王是特殊的数字,我们不妨把它们都当成0。
Input
输入有多组数据。
每组数据一行,5个非负整数(不大于13),各代表一张牌。
Output
对应每组数据,如果5张牌构成顺子则输出1,否则输出0。
Examples
Input
0 1 3 4 5 1 10 11 12 13 0 0 7 7 0
Output
1 0 0
Solution C
#include<stdio.h> int main() { int a[5],i,c,j,t,n; while(scanf("%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4])!=EOF) { c=0; for(i=0;i<5;i++) {if(a[i]==0)c++;} for(i=1;i<5;i++) for(j=0;j<5-i;j++) if(a[j]>a[j+1]) { t=a[j]; a[j]=a[j+1]; a[j+1]=t; } for(i=c;i<4;i++) if(a[i]==a[i+1])break; if(i==4&&a[4]-a[c]<=4||c==4||c==5) printf("1\n"); else printf("0\n"); }}
Solution C++
#include <vector> #include <stdio.h> #include <algorithm> // Determine whether numbers in an array are continuous // Parameters: numbers: an array, each number in the array is between // 0 and maxNumber. 0 can be treeted as any number between // 1 and maxNumber // maxNumber: the maximum number in the array numbers bool IsContinuous(std::vector<int> numbers, int maxNumber) { if(numbers.size() == 0 || maxNumber <=0) return false; // Sort the array numbers. std::sort(numbers.begin(), numbers.end()); int numberOfZero = 0; int numberOfGap = 0; // how many 0s in the array? std::vector<int>::iterator smallerNumber = numbers.begin(); while(smallerNumber != numbers.end() && *smallerNumber == 0) { numberOfZero++; ++smallerNumber; } // get the total gaps between all adjacent two numbers std::vector<int>::iterator biggerNumber = smallerNumber + 1; while(biggerNumber < numbers.end()) { // if any non-zero number appears more than once in the array, // the array can't be continuous if(*biggerNumber == *smallerNumber) return false; numberOfGap += *biggerNumber - *smallerNumber - 1; smallerNumber = biggerNumber; ++biggerNumber; } return (numberOfGap > numberOfZero) ? false : true; } int main() { int n,i,j; std::vector<int> numbers; while(1) { for(i=0;i<5;i++) { if(scanf("%d",&j)==EOF) return 0; numbers.push_back(j); } printf("%d\n",IsContinuous(numbers,13)); numbers.clear(); } return 0; }