PAT每日三题

1111 对称日

分数 15

作者 陈越

单位 浙江大学

SymDay.JPG

央视新闻发了一条微博,指出 2020 年有个罕见的“对称日”,即 2020 年 2 月 2 日,按照 年年年年月月日日 格式组成的字符串 20200202 是完全对称的。

给定任意一个日期,本题就请你写程序判断一下,这是不是一个对称日?

输入格式:

输入首先在第一行给出正整数 N(1<N≤10)。随后 N 行,每行给出一个日期,却是按英文习惯的格式:Month Day, Year。其中 Month 是月份的缩写,对应如下:

  • 一月:Jan
  • 二月:Feb
  • 三月:Mar
  • 四月:Apr
  • 五月:May
  • 六月:Jun
  • 七月:Jul
  • 八月:Aug
  • 九月:Sep
  • 十月:Oct
  • 十一月:Nov
  • 十二月:Dec

Day 是月份中的日期,为 [1, 31] 区间内的整数;Year 是年份,为 [1, 9999] 区间内的整数。

输出格式:

对每一个给定的日期,在一行中先输出 Y 如果这是一个对称日,否则输出 N;随后空一格,输出日期对应的 年年年年月月日日 格式组成的字符串。

输入样例:

5
Feb 2, 2020
Mar 7, 2020
Oct 10, 101
Nov 21, 1211
Dec 29, 1229

输出样例:

Y 20200202
N 20200307
Y 01011010
Y 12111121
N 12291229
#include<iostream>
#include<vector>
#include<string>
#include<unordered_map>
using namespace std;


bool fun(string r) {
	int i = 0, j = r.size() - 1;
	//不能写i!=j 遇到偶数的情况会一直循环
	while (i < j) {
		if (r[i] != r[j]) {
			return false;
		}
		i++;
		j--;
	}
	return true;
}


int main() {

	int n;
	cin >> n;
	unordered_map < string, int > arr = {
		{"Jan",1},{"Feb",2},{"Mar",3},{"Apr",4},{"May",5},
		{"Jun",6},{"Jul",7},{"Aug",8},{"Sep",9},{"Oct",10},
		{"Nov",11},{"Dec",12}
	};
	
	while (n--) {

		char a[4];
		int b, c;
		char t;
		scanf("%s %d%c %d", a, &b, &t, &c);
		string m, d, y;
		y = to_string(c);
		m =to_string(arr[string(a)]);
		d = to_string(b);
		while (m.size() != 2) {
			m = '0' + m;
		}
		while (d.size() != 2) {
			d = '0' + d;
		}
		while (y.size() != 4) {
			y = '0' + y;
		}
		string r = y + m+d;
		if (fun(r)) {
			cout << "Y " << r << endl;
		}
		else {
			cout << "N " << r << endl;
		}
	}


	return 0;
}

1112 超标区间

分数 20

作者 陈越

单位 浙江大学

data.JPG

上图是用某科学研究中采集的数据绘制成的折线图,其中红色横线表示正常数据的阈值(在此图中阈值是 25)。你的任务就是把超出阈值的非正常数据所在的区间找出来。例如上图中横轴 [3, 5] 区间中的 3 个数据点超标,横轴上点 9 (可以表示为区间 [9, 9])对应的数据点也超标。

输入格式:

输入第一行给出两个正整数 N(≤104)和 T(≤100),分别是数据点的数量和阈值。第二行给出 N 个数据点的纵坐标,均为不超过 1000 的正整数,对应的横坐标为整数 0 到 N−1。

输出格式:

按从左到右的顺序输出超标数据的区间,每个区间占一行,格式为 [A, B],其中 AB 为区间的左右端点。如果没有数据超标,则在一行中输出所有数据的最大值。

输入样例 1:

11 25
21 15 25 28 35 27 20 24 18 32 23

输出样例 1:

[3, 5]
[9, 9]

输入样例 2:

11 40
21 15 25 28 35 27 20 24 18 32 23

输出样例 2:

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


int main() {

	int n, m;
	cin >> n >> m;
	vector<int> arr(n);
	for (int i = 0; i < n; i++) {
		cin >> arr[i];
	}
	vector<int> brr;
	int max = arr[0];
	for (int i = 0; i < n; i++) {
		if (arr[i] > m) {
			brr.push_back(i);
			int t = i;
			i++;
			while (arr[i] > m&&i<n) {
				i++;
			}
			if (t == i) {
				brr.push_back(i);
			}
			else {
				brr.push_back(i - 1);
			}
		}
		if (arr[i] > max) {
			max = arr[i];
		}
	}
	if (brr.size() == 0) {
		cout << max << endl;
	}
	else {
		for (int i = 0; i < brr.size(); i += 2) {
			cout << "[" << brr[i] << ", " << brr[i + 1] << "]" << endl;
		}
	}



	return 0;
}

1109 擅长C

分数 20

作者 陈越

单位 浙江大学

当你被面试官要求用 C 写一个“Hello World”时,有本事像下图显示的那样写一个出来吗?

HWC.jpg

输入格式:

输入首先给出 26 个英文大写字母 A-Z,每个字母用一个 7×5 的、由 C. 组成的矩阵构成。最后在一行中给出一个句子,以回车结束。句子是由若干个单词(每个包含不超过 10 个连续的大写英文字母)组成的,单词间以任何非大写英文字母分隔。

题目保证至少给出一个单词。

输出格式:

对每个单词,将其每个字母用矩阵形式在一行中输出,字母间有一列空格分隔。单词的首尾不得有多余空格。

相邻的两个单词间必须有一空行分隔。输出的首尾不得有多余空行。

输入样例:

..C..
.C.C.
C...C
CCCCC
C...C
C...C
C...C
CCCC.
C...C
C...C
CCCC.
C...C
C...C
CCCC.
.CCC.
C...C
C....
C....
C....
C...C
.CCC.
CCCC.
C...C
C...C
C...C
C...C
C...C
CCCC.
CCCCC
C....
C....
CCCC.
C....
C....
CCCCC
CCCCC
C....
C....
CCCC.
C....
C....
C....
CCCC.
C...C
C....
C.CCC
C...C
C...C
CCCC.
C...C
C...C
C...C
CCCCC
C...C
C...C
C...C
CCCCC
..C..
..C..
..C..
..C..
..C..
CCCCC
CCCCC
....C
....C
....C
....C
C...C
.CCC.
C...C
C..C.
C.C..
CC...
C.C..
C..C.
C...C
C....
C....
C....
C....
C....
C....
CCCCC
C...C
C...C
CC.CC
C.C.C
C...C
C...C
C...C
C...C
C...C
CC..C
C.C.C
C..CC
C...C
C...C
.CCC.
C...C
C...C
C...C
C...C
C...C
.CCC.
CCCC.
C...C
C...C
CCCC.
C....
C....
C....
.CCC.
C...C
C...C
C...C
C.C.C
C..CC
.CCC.
CCCC.
C...C
CCCC.
CC...
C.C..
C..C.
C...C
.CCC.
C...C
C....
.CCC.
....C
C...C
.CCC.
CCCCC
..C..
..C..
..C..
..C..
..C..
..C..
C...C
C...C
C...C
C...C
C...C
C...C
.CCC.
C...C
C...C
C...C
C...C
C...C
.C.C.
..C..
C...C
C...C
C...C
C.C.C
CC.CC
C...C
C...C
C...C
C...C
.C.C.
..C..
.C.C.
C...C
C...C
C...C
C...C
.C.C.
..C..
..C..
..C..
..C..
CCCCC
....C
...C.
..C..
.C...
C....
CCCCC
HELLO~WORLD!

输出样例:

C...C CCCCC C.... C.... .CCC.
C...C C.... C.... C.... C...C
C...C C.... C.... C.... C...C
CCCCC CCCC. C.... C.... C...C
C...C C.... C.... C.... C...C
C...C C.... C.... C.... C...C
C...C CCCCC CCCCC CCCCC .CCC.

C...C .CCC. CCCC. C.... CCCC.
C...C C...C C...C C.... C...C
C...C C...C CCCC. C.... C...C
C.C.C C...C CC... C.... C...C
CC.CC C...C C.C.. C.... C...C
C...C C...C C..C. C.... C...C
C...C .CCC. C...C CCCCC CCCC.
#include<iostream>
#include<vector>
#include<string>
using namespace std;


int main() {

	vector<vector<string>> arr(26, vector<string>(7));
	for (int i = 0; i < 26; i++) {
		for (int j = 0; j < 7; j++) {
			cin >> arr[i][j];
		}
	}
	cin.ignore();
	string sentence;
	//cin >> sentence;
	//输入可能有空格
	getline(cin, sentence);
	vector<string> words;
	string word;
	for (char c : sentence) {
		if (isupper(c)) {
			word += c;
		}
		else {
			if (!word.empty()) {
				words.push_back(word);
				word.clear();
			}
		}
	}
	if (!word.empty()) {
		words.push_back(word);
		word.clear();
	}
	//输出
	for (int i = 0; i < words.size(); i++) {
		string& w = words[i];
		for (int j = 0; j < 7; j++) {
			for (int k = 0; k < w.size(); k++) {
				int c = w[k] - 'A';
				cout << arr[c][j];
				if (k != w.size() - 1) {
					cout << " ";
				}
			}
			cout << endl;
		}
		if (i != words.size() - 1) {
			cout << endl;
		}
	}

	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值