世界末日
题目描述
世界末日马上就要来临了,当然,每个人都想买到船票,但是由于船票有限,因此需要回答对一个问题才能买票。问题是这样的:给你一个数n (1 <= n <= 10000),之后给n个正整数 (<= 10000),问在这n个数中是否存在一些数的和是n的倍数。
输入
多组测试数据(最多100组)。首先输入一个数n,然后输入n个数。
输出
如果能找到一些数的和是n的倍数,输出"YES",否则输出"NO"。
样例输入
5 5 3 6 7 9
样例输出
YES
在n个整数的集合 A 中是否存在 A的子集的和 是 n 的倍数。
答案是肯定的,一定存在的
自己的代码:
用的深搜写的
#include<stdio.h>
int a[10003];
int flag,n;
int dfs(int sum){
if(sum%n==0){
flag=1;
return 0;
}
if(flag==1) return 0;
for(int i=0;i<n;i++){
sum+=a[i];
dfs(sum);
sum-=a[i];
}
}
int main()
{
int sum;
while(~scanf("%d",&n)){
sum=0;
for(int i=0;i<n;i++) scanf("%d",&a[i]);
flag=0;
dfs(sum);
if(flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}
大神的代码:
#include<stdio.h>
int main()
{
int n,m;
while(scanf("%d",&n)!=EOF){
for(int i=0;i<n;i++) scanf("%d",&m);
printf("YES\n");
}
return 0;
}