C++高手进,,解决程序编写题目。。。

来源:百度知道 编辑:UC知道 时间:2024/06/30 14:32:08
啊。。说实话吧!这个是作业!我不会做!哈哈!其实也不难。。高手帮忙看看。。送一百分。。。。。
要求,用C++写出这个程序:

——————————————分割线——————————————

程序存储问题:
设有n个程序{1,2,...n}要存放在长度为L的磁带上。程序i存放在磁带上的长度是Li,1<=i<=n。程序存储问题要求确定这n个程序在磁带上的一个存储方案,使得能够在磁带上存储尽可能多的程序。

完毕。。。。。。
谢谢。。。剩下的就是测试加修改了。。然后再研究一下为什么这么写。。。。。

方案:
1、先对n个程序按照从小到大排序。
2、排序后的程序,从小到大选取,并记录已经选取的程序大小总和,直到超过L。

#include <iostream>
using namespace std;
int const MAX = 128;
int L;//磁带度
int iens[MAX];//每个程序的长度
int N;//n个程序
int pop_sort(int n) {
int tmp;
for (int i = 0; i < n - 1; ++i) {
for (int j = i + 1; j < n; ++j) {
if(lens[i] > lens[j]) {
tmp = lens[i];
lens[i] = lens[j];
lens[j] = tmp;
}
}
}
}
int pickup() {
int tot = 0;
for (int i = 0; i < N; ++i){
if(tot + lens[i] > L) {
return i;
}
}
return N;//N个程序都能取完
}
int main() {
cin >> N;
for (int i = 0; i < N; ++i) {
cin >> lens[i];
}
pop_sort(N);
cout << pickup() << endl;
}
程序随手写的,可能有些错误,不过应该问题不大。