怎么找一个数组中较小的的几个数,并且他们的加合小于一个数,像这个问题一样

img

题意需求:页数小且 页数相加小于1000的几本书 了解需求之后就是实现排序 然后从最小的开始累加 加一个判断一次记录书本数


```c
#include<stdio.h>
int main(){
    int a[100];
    int book;
    int temp;
    int num=0;
    scanf("%d",&book);
    for(int i = 0;i<book;i++){
        scanf("%d",&a[i]);
    } 
    for(int i = 0;i<book;i++){
        for(int j = i+1;j<book;j++){
            if(a[i]>a[j]){
                temp = a[i];
                a[i]=a[j];
                a[j] = temp;
            }
        }
    }
    for(int i = 0;i<book;i++){
        printf("%d  ",a[i]);
    } 
    printf("\n");
    temp = 0;//这里把temp当数组下标用 
    while(temp<book){
        num=num + a[temp];
        if(num>1000) break;
        else temp++;
    }
    printf("可以带%d本",temp); 
}

```

把输入的页数从小到大排序,然后循环从 a[0] 开始一个一个加起来,sum+=a[i]; 之后判断 if(sum>1000)break; 后面加个 k++;代表几本书

int n,sum=0;k=0;
scanf("%d",&n);//关于n的范围你自己加上去把
for(int i=0;i<n;i++)
  scanf("%d ",&a[i]);//注意后面带空格
//排序的语句你自己写吧
for(i=0;i<n;i++)
{
  sum+=a[i];
   if(sum>1000)
    break;
  k++;
}
printf("最多可以带%d本书\n",k);