Problem 1009 - 小红帽

/*有一群喜欢带小红帽的家伙举行了一场别开生面的聚会,然而某些人被邪恶的WM讲帽子上涂了大灰狼的图标,可是每个人看不到自己头上的帽子有没有被涂,他们只能看到其他人头上的帽子是不是大灰狼的图案,现在告诉你每个人看到的别人头上大灰狼帽子的数量,聪明的你啊,能不能判断出来一共有多少个人头上被汪淼涂了可恶的大灰狼呢,当然如果你发现有些人撒谎的话,就直接输出-1吧

Input

包含多组测试数据,每组数组有两行
第一行读入一个n,代表聚会的人数 (n<=100)
第二行一次读入n个数,a[i]代表第i个人看到的其他人头上的大灰狼的个数

Output

每组数据输出一个数,多少人被涂了大灰狼

Sample Input

3
1 2 1
4
1 1 1 2

Sample Output

2
-1

*/

这个题可以列出方程然后找出规律。设总共有Y顶帽子上有大灰狼。对于第i个人看到的共有a[i]个帽子上有大灰狼,他自己戴的帽子上有x[i]个大灰狼,x[i]=0或1;

可列式得:Y=a[i]+x[i];

N个式子联立结合Y=x[1]+x[2]+……+x[N]即可解得:Y=sum/(N-1);判断下就行了。

#include<stdio.h>
int a[110];
int main()
{
    int i,N,sum,y,ok;
    while(scanf("%d",&N)!=EOF)
    {
        sum=0;
        ok=1;
        for(i=0;i<N;i++)
        {
            scanf("%d",&a[i]);
            sum+=a[i];
        }
        if(N==1) {                              //判断特殊值
                if(a[0]!=0) printf("-1\n");
                else printf("0\n");
        }
        else
        {
            if(sum%(N-1)!=0) ok=0;    //ok为标记
            else
            {
                y=sum/(N-1);
                for(i=0;i<N;i++)
                    if((y-a[i])!=0&&(y-a[i])!=1) {ok=0;break;}
            }
            if(ok)
                printf("%d\n",sum/(N-1));
            else printf("-1\n");
        }
    }
    return 0;
}

posted @ 2013-08-07 15:37  hjf007  阅读(203)  评论(0编辑  收藏  举报