SDUT 2570 奇怪的数之一

题目描述

给定N个正整数,求最小的不能由这些数的和组成的数。

输入

 多组数据,<=50
 每组数据第一行一个数N,1<=N<=10000
 第二行N个数字Pi,0<=Pi<=10000
 

输出

 每组数据输出一行,一个数即答案。

示例输入

4

1 2 3 4 

示例输出

11

多写几组数据就能找到规律:
求和,首先想到要把所有给定的数字按由小到大排序(一般思维,方便运算)。
一个序列中的前n项和s 如果小于第n+1个数超过1,那么不能得到的最小数就是s+1;
 1 #include<stdio.h>

 2 #include<stdlib.h>

 3 int cmp(const void *a,const void *b)

 4 {

 5     return *(int *)a-*(int *)b;

 6 }

 7 int main()

 8 {

 9     int n,m,j,k,s,a[100000],i;

10     while(scanf("%d",&n)!=EOF)

11     {

12         for(i=0;i<n;i++)

13         scanf("%d",&a[i]);

14 

15         qsort(a,n,sizeof(a[0]),cmp);s=0;

16         s=s+a[0];

17         if(s>=2)

18         {printf("1\n");continue;}

19         else

20         {

21             for(i=1;i<n;i++)

22         {

23             if(a[i]-s>1)

24             break;

25             else

26             s+=a[i];

27         }

28         printf("%d\n",s+1);

29         }

30     }

31 }

 

你可能感兴趣的:(du)