PAT乙级(C++)1016-1020
2016-10-26 13:09
176 查看
1016. 部分A+B
正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A = 3862767,DA= 6,则A的“6部分”PA是66,因为A中有2个6。现给定A、DA、B、DB,请编写程序计算PA + PB。
输入格式:
输入在一行中依次给出A、DA、B、DB,中间以空格分隔,其中0 < A, B < 1010。
输出格式:
在一行中输出PA+ PB的值。
输入样例1:
3862767 6 13530293 3
输出样例1:
399
输入样例2:
3862767 1 13530293 8
输出样例2:
0
#include <iostream> using namespace std; int main(){ string s1,s2; int d1,d2; long sum1=0,sum2=0; cin>>s1>>d1>>s2>>d2; for(int i=0;i<s1.length();i++){ if(s1[i]-'0'== d1){ sum1=sum1*10+d1; } } for(int i=0;i<s2.length();i++){ if(s2[i]-'0'==d2){ sum2=sum2*10+d2; } } cout<<sum1+sum2; return 0; }
1017. A除以B
本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数。你需要输出商数Q和余数R,使得A = B * Q + R成立。输入格式:
输入在1行中依次给出A和B,中间以1空格分隔。
输出格式:
在1行中依次输出Q和R,中间以1空格分隔。
输入样例:
123456789050987654321 7
输出样例:
17636684150141093474 3
思路:少于1000位的正整数显然不能用int,long类型进行计算,string类型存储数据,模拟做除法的过程即可。
#include <iostream> using namespace std; int main(){ string s1,result1="";//result1为商 long d,temp=0;//temp为余数 cin>>s1>>d; for(int i=0;i<s1.length();i++){ temp = temp*10+s1[i]-'0'; if(temp>=d){ char c = temp/d+'0'; result1 = result1+ c; temp = temp%d; } else if(result1.length()!=0){ result1 = result1+'0'; } } if(result1.length()==0) result1 = "0"; cout<<result1<<" "<<temp; return 0; }
1018. 锤子剪刀布
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。
输入格式:
输入第1行给出正整数N(<=105),即双方交锋的次数。随后N行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C代表“锤子”、J代表“剪刀”、B代表“布”,第1个字母代表甲方,第2个代表乙方,中间有1个空格。
输出格式:
输出第1、2行分别给出甲、乙的胜、平、负次数,数字间以1个空格分隔。第3行给出两个字母,分别代表甲、乙获胜次数最多的手势,中间有1个空格。如果解不唯一,则输出按字母序最小的解。
输入样例:
10
C J
J B
C B
B B
B C
C C
C B
J B
B C
J J
输出样例:
5 3 2
2 3 5
B B
#include <iostream> using namespace std; int main(){ int N=0; char jiw,yi; int result[2][6] ={0}; cin>>N; for(int i=0;i<N;i++){ cin>>jiw>>yi; if(jiw=='B'){ if(yi=='B'){ result[0][1]++; result[1][1]++; } else if(yi=='C'){ result[0][0]++; result[1][2]++; result[0][3]++; } else{ result[0][2]++; result[1][0]++; result[1][5]++; } } else if(jiw=='C'){ if(yi=='C'){ result[0][1]++; result[1][1]++; } else if(yi=='J'){ result[0][0]++; result[0][4]++; result[1][2]++; } else{ result[0][2]++; result[1][0]++; result[1][3]++; } } else{ if(yi=='J'){ result[0][1]++; result[1][1]++; } else if(yi=='B'){ result[0][0]++; result[1][2]++; result[0][5]++; } else{ result[0][2]++; result[1][0]++; result[1][4]++; } } } cout<<result[0][0]<<" "<<result[0][1]<<" "<<result[0][2]<<"\n"; cout<<result[1][0]<<" "<<result[1][1]<<" "<<result[1][2]<<"\n"; int index1=0,index2=0,num1=-1,num2=-1; for(int i=3;i<6;i++){ if(result[0][i]>num1){ index1=i; num1 = result[0][i]; } if(result[1][i]>num2){ index2=i; num2 = result[1][i]; } } if(index1 == 3) cout<<'B'<<' '; else if(index1==4) cout<<'C'<<' '; else cout<<'J'<<' '; if(index2 == 3) cout<<'B'; else if(index1==4) cout<<'C'; else cout<<'J'; return 0; }
1019. 数字黑洞
给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。例如,我们从6767开始,将得到
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
… …
现给定任意4位正整数,请编写程序演示到达黑洞的过程。
输入格式:
输入给出一个(0, 10000)区间内的正整数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
注意1:当输入0的时候,是没有输出的
注意2:当输入6174的时候,是有输出的7641 - 1467 = 6174
#include <stdio.h> #include <algorithm> using namespace std; int cmp(int a,int b){ return a>b; } int main(){ int d1[4],num; int maxsum, minsum; scanf("%d",&num); while(num!=0){ int temp =num; d1[0] = temp%10; temp = (temp - temp%10)/10; d1[1] = temp%10; temp = (temp - temp%10)/10; d1[2] = temp%10; temp = (temp - temp%10)/10; d1[3] = temp%10; sort(d1,d1+4,cmp); maxsum = d1[0]*1000+d1[1]*100+d1[2]*10+d1[3]; minsum = d1[0]+d1[1]*10+d1[2]*100+d1[3]*1000; num = maxsum-minsum; printf("%04d - %04d = %04d\n",maxsum,minsum,num); if(num==0 || num==6174) break; } return 0; }
1020. 月饼
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有3种月饼,其库存量分别为18、15、10万吨,总售价分别为75、72、45亿元。如果市场的最大需求量只有20万吨,那么我们最大收益策略应该是卖出全部15万吨第2种月饼、以及5万吨第3种月饼,获得 72 + 45/2 = 94.5(亿元)。
输入格式:
每个输入包含1个测试用例。每个测试用例先给出一个不超过1000的正整数N表示月饼的种类数、以及不超过500(以万吨为单位)的正整数D表示市场最大需求量。随后一行给出N个正数表示每种月饼的库存量(以万吨为单位);最后一行给出N个正数表示每种月饼的总售价(以亿元为单位)。数字间以空格分隔。
输出格式:
对每组测试用例,在一行中输出最大收益,以亿元为单位并精确到小数点后2位。
输入样例:
3 20
18 15 10
75 72 45
输出样例:
94.50
#include <iostream> #include <stdio.h> #include <algorithm> using namespace std; struct mooncake{ float value; float weight; }; int cmp(mooncake a,mooncake b){ float yb1 = a.value/a.weight; float yb2 = b.value/b.weight; return yb1>yb2; } int main(){ int N,All; float maxValue; cin>>N>>All; mooncake *allGoods = new mooncake ; for(int i=0;i<N;i++){ cin>>allGoods[i].weight; } for(int i=0;i<N;i++){ cin>>allGoods[i].value; } sort(allGoods,allGoods+N,cmp); int sum = 0,j=0; float meanValue; while(true){ if(j==N) break; if((sum + allGoods[j].weight)>All){ meanValue = allGoods[j].value/allGoods[j].weight; maxValue = maxValue + (All-sum)*meanValue; break; } else{ sum = sum + allGoods[j].weight; maxValue = maxValue +allGoods[j].value; if(sum == All) break; j++; } } printf("%.2f",maxValue); return 0; }
相关文章推荐
- PAT乙级(C++)1016-1020
- PAT (Basic) 1016~1020
- 浙江大学PAT_乙级_1016. 部分A+B (15)
- PAT-乙级-1016. 部分A+B (15)
- 1016. 部分A+B (15)-PAT乙级真题
- 1020. 月饼 (25)-PAT乙级真题
- 【C++】浙大PAT (Basic Level)1016. 部分A+B (15)
- 【PAT】(乙级)1020. 月饼 (25)
- PAT-乙级-1016. 部分A+B (15)
- PAT乙级练习题B1020. 月饼
- PAT 乙级 1016. 部分A+B (C语言版)
- 浙江大学PAT_乙级_1020. 月饼 (25)
- PAT乙级—1020. 月饼 (25)-native
- PAT 乙级 1020.月饼
- PAT-乙级-1020. 月饼 (25)
- PAT basic1016-1020(Python版)
- PAT 乙级 1016.部分A+B
- C++ - PAT - 1020. 月饼 (25)(贪心算法)
- PAT乙级1001. 害死人不偿命的(3n+1)猜想 (15) C++
- 【PAT】(乙级)1016. 部分A+B (15)