- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
ACM程序设计大赛模拟试题及答案
一、入门题:快递收费计算(模拟)
问题描述
天天快递针对个人寄件推出阶梯收费标准,具体规则如下:
重量计费:首重1kg内(含1kg)基础费10元;超过1kg的部分,每增加1kg(不足1kg按1kg计)加收5元。
距离计费:距离50km内(含50km)无额外费用;超过50km的部分,每10km(不足10km按10km计)加收3元。
总费用=重量费用+距离费用。
现给定包裹重量w(单位:kg,0w≤50)和运输距离d(单位:km,0d≤200),请计算总费用并保留1位小数。
输入格式
一行两个浮点数w和d,用空格分隔。
输出格式
一行一个浮点数,表示总费用,保留1位小数。
样例输入1
1.050.0
样例输出1
10.0
样例输入2
2.365.5
样例输出2
26.0
二、基础题:半完数查找(数学+枚举)
问题描述
定义“半完数”:对于正整数n,若其所有真因子(不包含自身的约数)的和s满足n≤s2n,则n为半完数。
例如:6的真因子为1、2、3,和为6,满足6≤612,故6是半完数;12的真因子和为1+2+3+4+6=16,满足12≤1624,故12是半完数。
给定两个正整数a和b(1≤a≤b≤1000),请输出[a,b]区间内所有半完数,按从小到大顺序排列,每个数占一行。
输入格式
一行两个正整数a和b,用空格分隔。
输出格式
每行一个半完数,按升序排列。若区间内无半完数,无输出。
样例输入
612
样例输出
6
12
三、提高题:二维背包(动态规划)
问题描述
某货车需运输一批物品,每个物品有重量w_i、体积v_i、价值p_i三个属性。货车的最大载重量为W,最大容积为V。要求选择若干物品装入货车,使得总重量不超过W、总体积不超过V,且总价值最大。
请计算最大总价值。
输入格式
第一行三个正整数n(物品数量,1≤n≤100)、W(最大重量,1≤W≤100)、V(最大容积,1≤V≤100);
接下来n行,每行三个正整数w_i、v_i、p_i(1≤w_i≤W,1≤v_i≤V,1≤p_i≤100)。
输出格式
一行一个正整数,表示最大总价值。
样例输入
3108
325
436
547
样例输出
13
答案部分
第一题:快递收费计算(C++代码)
#includeiostream
#includecmath
#includeiomanip
usingnamespacestd;
intmain(){
doublew,d;
cinwd;
doubleweight_cost,dist_cost=0.0;
//计算重量费用:向上取整处理不足1kg的情况
intweight=ceil(w);
if(weight=1){
weight_cost=10.0;
}else{
weight_cost=10.0+(weight-1)*5.0;
}
//计算距离费用:超过50km部分按10km阶梯收费
if(d50){
doubleexcess=d-50;
intstep=ceil(excess/10);//不足10km按10km计
dist_cost=step*3.0;
}
doubletotal=weight_cost+dist_cost;
coutfixedsetprecision(1)totalendl;
return0;
}
第二题:半完数查找(C++代码)
#includeiostream
usingnamespacestd;
//计算n的所有真因子之和
intgetProperDivisorSum(intn){
if(n==1)return0;//1没有真因子
intsum=1;//1是所有n1的真因子
for(inti=2;i*i=n;++i){
if(n%i==0){
sum+=i;
if(i
文档评论(0)