ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

pat乙级刷题第十天(1019.1020)

2021-07-30 22:30:52  阅读:190  来源: 互联网

标签:空行 输出 pat 第十天 月饼 int 样例 数字 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,第十天,月饼,int,样例,数字,1019.1020
来源: https://blog.csdn.net/qq_45996378/article/details/119256467

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有