记得这个题目也是在省赛前摧残了很久的。
给出n 然后给n个数 n个数可以组合形成 其他数字 比如有1 2就可以组成三
现在要问这n个数所不能组成的数字里最小的那个
正确解法就是排序
然后循环数组
从第一个开始 更新sum,sum是之前数字的和
如果sum+1>arr[i];
那么最小的不能组成的数字就是sum+1
这个题目有点类似二进制的思想。
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int arr[1005];
int main()
{
int i,n,sum=0;
scanf("%d",&n);
for(i=0;i<n;++i)
{
scanf("%d",&arr[i]);
}
sort(arr,arr+n);
for(i=0;i<n;++i)
{
if(sum+1<arr[i])
{
printf("%d\n",sum+1);
break;
}
sum+=arr[i];
}
if(i==n)
printf("%d\n",sum+1);
return 0;
}