奇怪的数之一
Time Limit: 1000MS Memory limit: 65536K
题目描述
给定N个正整数,求最小的不能由这些数的和组成的数。
输入
多组数据,<=50
每组数据第一行一个数N,1<=N<=10000
第二行N个数字Pi,0<=Pi<=10000
输出
每组数据输出一行,一个数即答案。
示例输入
4 1 2 3 4
示例输出
11
这道题目,看起来真是好高端,实际上一点也没有科技含量。 也用不到什么算法。 在纸上划一下找一下规律。
归纳一下就会发现 一个序列中的前n项和如果是s[n], 第n+1项如果是a[n+1]. 那么如果a[n+1]-s[n]>1,s[n]+1,就是结果。
不要忘了排序啊
#include <stdio.h> #include <string.h> #include <math.h> int a[100000]; int cmp(const void *e,const void *f) { return *(int *)e-*(int *)f; } int main() { int i,j,n,m,t; long long int s; while(scanf("%d",&n)!=EOF) { for(i=0;i<=n-1;i++) { scanf("%d",&a[i]); } qsort(a,n,sizeof(a[0]),cmp); if(a[0]>1) { printf("1\n"); continue; } s=0; s+=a[0]; for(i=1;i<=n-1;i++) { if(s>=a[i]||(s+1)==a[i]) { s+=a[i]; }else { break; } } printf("%lld\n",s+1); } return 0; }