题目描述:
设有n个程序{1,2,…, n }要存放在长度为L 的磁带上。程序i存放在磁带上的长度是li,1≤i≤n 。程序存储问题要求确定这n个程序在磁带上的一个存储方案,使得能够在磁带上存储尽可能多的程序。
编程任务:
对于给定的n 个程序存放在磁带上的长度,编程计算磁带上最多可以存储的程序数。
数据输入:
(由文件input.txt 给出输入数据。)第一行是2个正整数,分别表示文件个数n 和磁带的长度L。接下来的1行中,有n个正整数,表示程序存放在磁带上的长度。
结果输出:
将编程计算出的最多可以存储的程序数输出(到文件output.txt) 。
输入文件示例输出文件示例
input.txt output.txt
6 50 5
2 3 13 8 80 20
注:若题目要求含上述括号中橙色字体,即将代码第11、12行注释解除,让其执行即可。
代码如下:
#include <iostream> #include <algorithm>//sort()头文件 #include <fstream>//文件读写操作头文件 using namespace std; #define N 10000 bool cmp(int x,int y){ return x<y; } int main(){ //freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); int n,L; cin>>n>>L;//输入文件个数,磁带长度 int Long[N]; for(int i=0;i<n;i++){ cin>>Long[i]; } sort(Long,Long+n,cmp);//以升序排列 int flag=0;//记录存储第flag个程序,flag从0开始(数组存储从0开始) int LongSum=0;//记录存储的程序长度和 int Num=0;//记录存储的程序个数 while(flag<n){ LongSum=LongSum+Long[flag];//求和 if(LongSum>L) break;//超出磁带长度,跳出循环 else Num++; flag++; } cout<<Num<<endl; return 0; }