pat乙级刷题第十天(1019.1020)
2021/7/30 23:10:12
本文主要是介绍pat乙级刷题第十天(1019.1020),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1019 数字黑洞 (20 分)
给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174
,这个神奇的数字也叫 Kaprekar 常数。
例如,我们从6767
开始,将得到
7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174 7641 - 1467 = 6174 ... ...
现给定任意 4 位正整数,请编写程序演示到达黑洞的过程。
输入格式:
输入给出一个 (0,104) 区间内的正整数 N。
输出格式:
如果 N 的 4 位数字全相等,则在一行内输出 N - N = 0000
;否则将计算的每一步在一行内输出,直到 6174
作为差出现,输出格式见样例。注意每个数字按 4
位数格式输出。
输入样例 1:
6767
结尾无空行
输出样例 1:
7766 - 6677 = 1089 9810 - 0189 = 9621 9621 - 1269 = 8352 8532 - 2358 = 6174
结尾无空行
输入样例 2:
2222
结尾无空行
输出样例 2:
2222 - 2222 = 0000
结尾无空行
思路:我是先整型输入,在转换为数组(为了方便对比和输出),然后判断是不是全都是相同的数字,是就直接按要求输出;不是就将数组排序,再将递减排序和递增排序的数弄出来,进行减法运算,然后就按要求输出。
#include<bits/stdc++.h> using namespace std; int main(){ int N; cin>>N; int n[4],a,b,c; while(1){ n[0]=N/1000; n[1]=N/100%10; n[2]=N/10%10; n[3]=N%10; if(n[0]==n[1]&&n[1]==n[2]&&n[2]==n[3]){ cout<<N<<" - "<<N<<" = 0000"; break; } sort(n, n+4); a=n[3]*1000+n[2]*100+n[1]*10+n[0];//递减的数 b=n[0]*1000+n[1]*100+n[2]*10+n[3];//递增的数 c=a-b; cout<<n[3]<<n[2]<<n[1]<<n[0]; cout<<" - "; cout<<n[0]<<n[1]<<n[2]<<n[3]; cout<<" = "; cout<<setw(4)<<setfill('0')<<c; N=c; if(N!=6174) cout<<endl; else break; } return 0; }
1020 月饼 (25 分)
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。
注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,获得 72 + 45/2 = 94.5(亿元)。
输入格式:
每个输入包含一个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N 表示月饼的种类数、以及不超过 500(以万吨为单位)的正整数 D 表示市场最大需求量。随后一行给出 N 个正数表示每种月饼的库存量(以万吨为单位);最后一行给出 N 个正数表示每种月饼的总售价(以亿元为单位)。数字间以空格分隔。
输出格式:
对每组测试用例,在一行中输出最大收益,以亿元为单位并精确到小数点后 2 位。
输入样例:
3 20 18 15 10 75 72 45
结尾无空行
输出样例:
94.50
结尾无空行
思路:这题我是⾸先根据⽉饼的总价和数量计算出每⼀种⽉饼的单价,然后将⽉饼数组按照单价从⼤到⼩排序,根据需求量D的⼤⼩,从单价最⼤的⽉饼开始售卖,将销售掉这种⽉饼的价格累加到money中, 最后输出money就可以啦~
#include<bits/stdc++.h> using namespace std; struct mooncake{ double mount,price,unit;//总库存量,总售价,单价 }; int compare(mooncake a, mooncake b) {//按单价的值从大到小排序 return a.unit > b.unit; } int main(){ int N,D; cin>>N>>D; vector<mooncake> a(N); for(int i=0;i<N;i++){ cin>>a[i].mount; } for(int i=0;i<N;i++){ cin>>a[i].price; } for(int i=0;i<N;i++){ a[i].unit=a[i].price/a[i].mount; } sort(a.begin(),a.end(),compare); double money=0.0; for(int i=0;D>0&&i<N;i++){ if(D<=a[i].mount){ money+=a[i].unit*D; } else{ money+=a[i].unit*a[i].mount; } D-=a[i].mount; } cout<<fixed<<setprecision(2)<<money; return 0; }
这篇关于pat乙级刷题第十天(1019.1020)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01后台管理开发学习:新手入门指南
- 2024-11-01后台管理系统开发学习:新手入门教程
- 2024-11-01后台开发学习:从入门到实践的简单教程
- 2024-11-01后台综合解决方案学习:从入门到初级实战教程
- 2024-11-01接口模块封装学习入门教程
- 2024-11-01请求动作封装学习:新手入门教程
- 2024-11-01登录鉴权入门:新手必读指南
- 2024-11-01动态面包屑入门:轻松掌握导航设计技巧
- 2024-11-01动态权限入门:新手必读指南
- 2024-11-01动态主题处理入门:新手必读指南