游客 Signup | Login
中文 | En

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;
}
Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题