1 条题解

  • 0
    @ 2025-4-12 21:51:00

    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");
    }}
    

    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;
    }
    

    Java :

    import java.util.Scanner;
    
    public class Main {
    
    	public static void main(String[] args) {
    
    		Scanner cin = new Scanner(System.in);
    		while (cin.hasNext()) {
    			int card[] = new int[15];
    			int temp;
    
    			for (int i = 0; i < 5; i++) {
    				temp = cin.nextInt();
    				card[temp]++;
    			}
    
    			if (isStraight(card))
    				System.out.println("1");
    			else
    				System.out.println("0");
    		}
    
    	}
    
    	public static boolean isStraight(int card[]) {
    
    		for (int i = 1; i <= 13; i++)
    			if (card[i] > 1)
    				return false;
    
    		int maxHasStraight = 0;
    		int fiveSum = 0;
    
    		for (int i = 1; i <= 5; i++)
    			if (card[i] != 0)
    				fiveSum++;
    
    		maxHasStraight = Math.max(maxHasStraight, fiveSum);
    
    		for (int i = 6; i <= 13; i++) {
    			if (card[i] != 0)
    				fiveSum++;
    			if (card[i - 5] != 0)
    				fiveSum--;
    			maxHasStraight = Math.max(maxHasStraight, fiveSum);
    
    		}
    
    		if (maxHasStraight + card[0] == 5)
    			return true;
    
    		return false;
    	}
    
    }
    
    
    • 1

    信息

    ID
    1992
    时间
    1000ms
    内存
    32MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者