博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
程序存储问题
阅读量:5247 次
发布时间:2019-06-14

本文共 819 字,大约阅读时间需要 2 分钟。

问题:

设有n 个程序{1,2,…, n }要存放在长度为L的磁带上。程序i存放在磁带上的长度是i l , 1 ≤i ≤n。程序存储问题要求确定这n 个程序在磁带上的一个存储方案,使得能够在磁带上存储尽可能多的程序。对于给定的n个程序存放在磁带上的长度,编程计算磁带上最多可以存储的程序数。

回答:题目要求计算给定长度的磁带最多可存储的程序个数,先对程序的长度从小到大排序,再采用贪心算法求解。

算法设计:
a. 定义数组a[n]存储n个程序的长度,s为磁带的长度;
b. 调用库函数sort(a,a+n)对程序的长度从小到大排序;
c. 函数most()计算磁带最多可存储的程序数,采用while循环依次对排序后的程序
长度进行累加,用i计算程序个数,用sum计算程序累加长度(初始i=0,sum=0):
① sum=sum+a[i];
② 若sum<=s,i加1,否则i为所求;
③ i=n时循环结束;
d. 若while循环结束时仍有sum<=s,则n为所求。

代码如下:

#include<iostream>

using namespace std;
#include<algorithm>
int a[1000000];
int most(int *a,int n,int s)
{
int i=0,sum=0;
while(i<n)
{
sum=a[i]+sum;
if(sum<=s)
i++;
else return i;
}
return n;
}
int main()
{
int i,n,s;
scanf("%d %d\n",&n,&s);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
printf("%d",most(a,n,s));
return 0;
}

转载于:https://www.cnblogs.com/benchao/p/4521382.html

你可能感兴趣的文章
【STL】Message Flood(set)
查看>>
关于技术趋势,写给奋斗中的程序员们
查看>>
批处理警惕等号前面的空格
查看>>
计算思维
查看>>
用 NodeJS 实现 BigPipe
查看>>
Orange's笔记(1)
查看>>
python集合,深浅copy
查看>>
java 图片处理工具类
查看>>
gearman简介及安装使用
查看>>
login.php织梦进不去,dedecms后台登录成功后进入不了后台的最终解决方法
查看>>
php二维数据签名验证,sing 签名验证
查看>>
matlab实验四循环结构程序设计,MATLAB实验四_循环结构程序设计.doc
查看>>
oracle dataguard详细,Oracle 11G DataGuard重启详细过程
查看>>
墨刀linux桌面版,深度商店应用Kedis、微信开发者工具、UltraEdit、墨刀
查看>>
xgad加密linux,一种机载XGA视频信息采集的设计与实现.pdf
查看>>
c语言 扑克牌大小,C语言实现简易扑克牌游戏
查看>>
android sqlite3 加密,Android SQLite文件加密
查看>>
android textview settypeface,【Android初级】使用TypeFace设置TextView的文字字体(附源码)...
查看>>
html页面引入ts文件,如何将ts文件中收到的参数显示到html页面
查看>>
html伪类元素居中,总结css伪类的几种常见操作
查看>>