国家分组c

时间:2017-10-28 16:22:18

标签: c

一群人坐在一组编号为1到N的小组中。众所周知,同一国家的人们坐在一起。 输出是一个整数,表示不同的国家/地区。 输入

4(没有测试案例)
2(组中没有人)
1 1(在这里有来自差异国家的2人)
2
1 3
7
1 1 2 2 3 3 3
7
7 7 7 7 7 7 7
输出应为
2
无效数据
4
1
我的程序:请告诉我错误在哪里

#include<stdio.h>
#include<string.h>
int main()
{
int tcaseno,nopgrp,flag=0;
int arr[1000];
int count=0,i=0,j=0,t=0;
scanf("%d", &tcaseno);
t=tcaseno;
while(t>0)
{
scanf("%d\n", &nopgrp);
for (i = 0; i < nopgrp;i++)
{
scanf("%d", &arr[i]);
}
for (j = 0; j < nopgrp;j++)
{
if(arr[j]==1)
{
    count++;
}
else if(arr[j]==2)
{
 if(arr[j+1]==2)
 {
    count++;
 }  
 else
 {
    flag=1;
 }
}
else if(arr[j]==3)
{
 if((arr[j+1]==3)&&(arr[j+2]==3))
 {
    count++;
 }  
 else
 {
    flag=2;
 }
}
else if(arr[j]==4)
{
 if((arr[j+1]==4)&&(arr[j+2]==4)&&(arr[j+3]==4))
 {
    count++;
 }  
 else
 {
    flag=3;
 }
}
else if(arr[j]==5)
{
 if((arr[j+1]==5)&&(arr[j+2]==5)&&(arr[j+3]==5)&&(arr[j+4]==5))
 {
    count++;
 }
 else
 {
    flag=4;
 }  
}
else if(arr[j]==6)
{
 if((arr[j+1]==6)&&(arr[j+2]==6)&&(arr[j+3]==6)&&(arr[j+4]==6)&&(arr[j+5]==6))
 {
    count++;
 }  
 else
 {
    flag=5;
 }
}
else if(arr[j]==7)
{
 if((arr[j+1]==7)&&(arr[j+2]==7)&&(arr[j+3]==7)&&(arr[j+4]==7)&&(arr[j+5]==7)&&(arr[j+6]==7))
 {
    count++;
 }
 else
 {
    flag=6;
 }  
}
else if(arr[j]==8)
{
 if((arr[j+1]==8)&&(arr[j+2]==8)&&(arr[j+3]==8)&&(arr[j+4]==8)&&(arr[j+5]==8)&&(arr[j+6]==8)&&(arr[j+7]==8))
 {
    count++;
 }
 else 
 {
    flag=7;
 }  
}
else if(arr[j]==9)
{
 if((arr[j+1]==9)&&(arr[j+2]==9)&&(arr[j+3]==9)&&(arr[j+4]==9)&&(arr[j+5]==9)&&(arr[j+6]==9)&&(arr[j+7]==9)&&(arr[j+8]==9))
 {
    count++;
 }
 else
 {
    flag=8;
 }  
}
else if(arr[j]==0)
{
    flag=9;
}
}

if(flag!=0)
{
printf("Invalid Data");
flag=0;
}
else
{
printf("%d\n",count);
count=0;
}
t--;
}

return 0;
}

1 个答案:

答案 0 :(得分:0)

if((arr[j+1]==9)&&(arr[j+2]==9)&&(arr[j+3]==9) ...)

您可以使用另一个for循环简化上述代码。显然你只想看看数组中有多少不同的数字。

请注意,使用C或学习C的主要原因之一是效率。因此int arr[1000]有点不合适,因为它分配了4000个字节。您可能希望使用malloc / free简化该操作。

您应该使用printf告诉用户输入内容。

我对你想要达到的目标做了一些猜测。

int tcaseno, nopgrp, error;
int count, i;
int *arr;
printf("no_test_cases: ");
scanf("%d", &tcaseno);
while(tcaseno > 0)
{
    error = 0;
    count = 1;
    printf("no_people_in_group: ");
    scanf("%d", &nopgrp);
    if(nopgrp > 0 && nopgrp < 1000)
    {
        arr = malloc(nopgrp * sizeof(int));
        printf("Enter %d numbers: ", nopgrp);
        for(i = 0; i < nopgrp; i++)
            scanf("%d", &arr[i]);
        for(i = 1; i < nopgrp; i++)
        {
            if(arr[i - 1] > arr[i])
                error = 1;
            else if(arr[i - 1] != arr[i])
                count++;
        }
        free(arr);
    }
    else
        error = 1;
    if(error)
        printf("Invalid Data\n");
    else
        printf("Result: %d\n", count);
    tcaseno--;
}