PAT每日三题补

047 编程团体赛

分数 20

作者 CHEN, Yue

单位 浙江大学

编程团体赛的规则为:每个参赛队由若干队员组成;所有队员独立比赛;参赛队的成绩为所有队员的成绩和;成绩最高的队获胜。

现给定所有队员的比赛成绩,请你编写程序找出冠军队。

输入格式:

输入第一行给出一个正整数 N(≤104),即所有参赛队员总数。随后 N 行,每行给出一位队员的成绩,格式为:队伍编号-队员编号 成绩,其中队伍编号为 1 到 1000 的正整数,队员编号为 1 到 10 的正整数,成绩为 0 到 100 的整数。

输出格式:

在一行中输出冠军队的编号和总成绩,其间以一个空格分隔。注意:题目保证冠军队是唯一的。

输入样例:

6
3-10 99
11-5 87
102-1 0
102-3 100
11-9 89
3-2 61

输出样例:

11 176
#include<iostream>
#include<string>
#include<map>
using namespace std;


int main() {

	int n;
	cin >> n;
	map<int, int> arr;
	for (int i = 0; i < n; i++) {
		int a, b, c;
		scanf("%d-%d %d", &a, &b, &c);
		arr[a] += c;
	}
	int m1=0, m2=0;
	for (auto& i : arr) {
		if (m2 < i.second) {
			m2 = i.second;
			m1 = i.first;
		}
	}
	cout << m1 << " " << m2 << endl;

	return 0;
}

1048 数字加密

分数 20

作者 CHEN, Yue

单位 浙江大学

本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。

输入格式:

输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。

输出格式:

在一行中输出加密后的结果。

输入样例:

1234567 368782971

输出样例:

3695Q8118
#include<iostream>
#include<string>
using namespace std;


int main() {

	string a, b, s="";
	cin >> a >> b;
	int t1 = a.size()-1;
	int t2 = b.size() - 1;
	int c = 0;
	while (t1 >= 0 || t2 >= 0) {
		int t = 0;
		c += 1;
		if (c % 2 != 0) {
			if (t1 >= 0) {
				t += a[t1] - '0';
			}
			if (t2 >= 0) {
				t += b[t2] - '0';
			}
			int r = t % 13;
			if (r == 10) {
				s = 'J' + s;
			}
			else if (r == 11) {
				s = 'Q' + s;
			}
			else if (r == 12) {
				s = 'K' + s;
			}
			else {
				s = to_string(t % 13) + s;
			}
			
		}
		else {
			t = 0;
			if (t2 >= 0) {
				t += b[t2]-'0';
			}
			
			if (t1 >= 0) {
				t -= a[t1]-'0';
			}

			if (t < 0) {
				t += 10;
			}
			
			s = to_string(t) + s;
		}
		t1--;
		t2--;
		
	}
	cout << s << endl;


	return 0;
}

1049 数列的片段和

分数 20

作者 CAO, Peng

单位 Google

给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段。例如,给定数列 { 0.1, 0.2, 0.3, 0.4 },我们有 (0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4) (0.4) 这 10 个片段。

给定正整数数列,求出全部片段包含的所有的数之和。如本例中 10 个片段总和是 0.1 + 0.3 + 0.6 + 1.0 + 0.2 + 0.5 + 0.9 + 0.3 + 0.7 + 0.4 = 5.0。

输入格式:

输入第一行给出一个不超过 105 的正整数 N,表示数列中数的个数,第二行给出 N 个不超过 1.0 的正数,是数列中的数,其间以一个空格分隔。

输出格式:

在一行中输出该序列所有片段包含的数之和,精确到小数点后 2 位。

输入样例:

4
0.1 0.2 0.3 0.4

输出样例:

5.00
#include<iostream>
#include<cmath>
#include<vector>
#include<iomanip>
using namespace std;


int main() {

	int n;
	cin >> n;
	vector<double> arr(n);
	for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}
	long long s = 0;
	/*for (int i = 0; i < n; i++) {
		
		for (int j = i; j <n; j++) {
			for (int k = i; k <= j; k++) {
				s += arr[k];
			}
		}
	}*/
	
	/*for (int i = 0; i < n; i++) {
		double t = arr[i];
		s += t;
		for (int j = i+1; j < n; j++) {
			t += arr[j];
			s += t;
		}
	}	*/
   
//double有精度问题化为长整型
	for (int i = 0; i < n; i++) {
		s += (long long)((arr[i] * 1000)*(i + 1) * (n - i));
	}
	cout << fixed << setprecision(2) << s/1000.0 << endl;
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值