PAT每日三题

1108 String复读机

分数 20

作者 陈越

单位 浙江大学

给定一个长度不超过 104 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 StringString.... (注意区分大小写)这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 String 的顺序打印,直到所有字符都被输出。例如 gnirtSSs 要调整成 StringS 输出,其中 s 是多余字符被忽略。

输入格式:

输入在一行中给出一个长度不超过 104 的、仅由英文字母构成的非空字符串。

输出格式:

在一行中按题目要求输出排序后的字符串。题目保证输出非空。

输入样例:

sTRidlinSayBingStrropriiSHSiRiagIgtSSr

输出样例:

StringStringSrigSriSiSii
#include<iostream>
#include<string>
#include<unordered_map>
using namespace std;


int main() {

	string s1;
	cin >> s1;
	unordered_map<char, int> arr;
	for (char c : s1) {
		if (c == 'S' || c == 't' || c == 'r' || c == 'i' || c == 'n' || c == 'g') {
			arr[c]++;
		}
	}
	int n = arr['S'] + arr['t'] + arr['r'] + arr['i'] + arr['n'] + arr['g'];
	while (n--) {
		if (arr['S']>0) {
			cout << 'S';
			arr['S']--;
		}
		if (arr['t']>0) {
			cout << 't';
			arr['t']--;
		}
		if (arr['r']>0) {
			cout << 'r';
			arr['r']--;
		}
		if (arr['i']>0) {
			cout << 'i';
			arr['i']--;
		}
		if (arr['n']>0) {
			cout << 'n';
			arr['n']--;
		}
		if (arr['g']>0) {
			cout << 'g';
			arr['g']--;
		}
	}
	




	return 0;
}

1107 老鼠爱大米

分数 20

作者 陈越

单位 浙江大学

翁恺老师曾经设计过一款 Java 挑战游戏,叫“老鼠爱大米”(或许因为他的外号叫“胖胖鼠”)。每个玩家用 Java 代码控制一只鼠,目标是抢吃尽可能多的大米让自己变成胖胖鼠,最胖的那只就是冠军。

因为游戏时间不能太长,我们把玩家分成 N 组,每组 M 只老鼠同场竞技,然后从 N 个分组冠军中直接选出最胖的冠军胖胖鼠。现在就请你写个程序来得到冠军的体重。

输入格式:

输入在第一行中给出 2 个正整数:N(≤100)为组数,M(≤10)为每组玩家个数。随后 N 行,每行给出一组玩家控制的 M 只老鼠最后的体重,均为不超过 104 的非负整数。数字间以空格分隔。

输出格式:

首先在第一行顺次输出各组冠军的体重,数字间以 1 个空格分隔,行首尾不得有多余空格。随后在第二行输出冠军胖胖鼠的体重。

输入样例:

3 5
62 53 88 72 81
12 31 9 0 2
91 42 39 6 48

输出样例:

88 31 91
91
#include<iostream>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;


int main() {

	int n, m;
	cin >> n >> m;
	int t = 0;
	vector<int> r;
	for (int i = 0; i < n; i++) {
		vector<int> arr(m);
		for (int j = 0; j < m; j++) {
			cin >> arr[j];
		}
		sort(arr.begin(), arr.end(), greater<int>());
		r.push_back(arr[0]);
		if (t < arr[0]) {
			t = arr[0];
		}
		
	}
	for (int i = 0; i < r.size(); i++) {
		cout << r[i];
		if (i != r.size() - 1) {
			cout << " ";
		}
	}
	cout <<endl<< t << endl;


	return 0;
}

1106 2019数列

分数 15

作者 陈越

单位 浙江大学

把 2019 各个数位上的数字 2、0、1、9 作为一个数列的前 4 项,用它们去构造一个无穷数列,其中第 n(>4)项是它前 4 项之和的个位数字。例如第 5 项为 2, 因为 2+0+1+9=12,个位数是 2。

本题就请你编写程序,列出这个序列的前 n 项。

输入格式:

输入给出正整数 n(≤1000)。

输出格式:

在一行中输出数列的前 n 项,数字间不要有空格。

输入样例:

10

输出样例:

2019224758

题外话:这个数列中永远不会出现 2018,你能证明吗?

#include<iostream>
#include<vector>
using namespace std;


int main() {

	int n;
	cin >> n;
	vector<int> arr(1000);
	arr[0] = 2;
	arr[1] = 0;
	arr[2] = 1;
	arr[3] = 9;
	for (int i = 4; i < 1000 ; i++) {
		arr[i] = (arr[i - 1] + arr[i - 2] + arr[i - 3] + arr[i - 4]) % 10;
	}
	for (int i = 0; i < n; i++) {
		cout << arr[i];
	}


	return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值