问题描述:
设有n个程序要存放在长度为L的磁带上,第i个程序的长度为li,设计算法使磁带上面存储的程序最多。
输入文件第一行为N和L;输出文件输出可以存储最多的程序数目。
输入文件:input.in 输出文件:output.out
7 50 5
2 3 13 8 80 20 100
源程序代码如下:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <iostream> 2 #include <fstream> 3 4 using namespace std; 5 6 int main() 7 { 8 ifstream fin("f:\\chengxucunchu\\input.in"); 9 ofstream fout("f:\\chengxucunchu\\output.out"); 10 11 int n,l,sum,temp; 12 13 fin>>n>>l; 14 int *p = new int[n]; 15 for (int i=0;i < n;i++) 16 fin>>p[i]; 17 //输出输入数据 18 for(int i=0;i<n;i++) 19 fout<<p[i]<<' '; 20 fout<<endl; 21 fout<<"输入数据成功"; 22 fout<<endl; 23 24 25 26 27 for(int i=0;i<n-1;i++) 28 for (int j = i+1;j<n;j++) 29 { 30 if(p[i] > p[j]) 31 { 32 temp=p[i]; 33 p[i]=p[j]; 34 p[j]=temp; 35 } 36 37 } 38 39 //输出排序后的数 40 for(int i=0;i<n;i++) 41 fout<<p[i]<<' ' ; 42 fout<<endl; 43 fout<<"输出排序后得数成功"; 44 fout<<endl; 45 46 sum = 0; 47 int k=0; 48 49 while((sum<=l)&(k<=n)) 50 { 51 sum = sum + p[k]; 52 k++; 53 54 } 55 56 k--; 57 58 //输出能存储的个数以及存储的各个程序长度 59 fout<<k<<endl; 60 for(int i=0;i<k;i++) 61 fout<<p[i]<<' '; 62 fout<<endl; 63 fout<<"输出能存储的个数以及存储的各个程序长度"<<endl; 64 65 66 delete p; 67 68 fin.close(); 69 fout.close(); 70 71 return 1; 72 73 74 }