PAT :计算机程序设计能力考试:一个高校编程学习赛,内容基础,据说题目描述含糊不清,造成诸多理解错误。
第一观感是:输入输出样例极少,未给学生充分理解题目,提供更多辅助。
PAT 乙级:只涉及基础编程,最难到排序算法。适合基础语法学习阶段的同学。
问题描述
让我们用字母 B
来表示“百”、字母 S
表示“十”,用 12...n
来表示不为零的个位数字 n
(<10),换个格式来输出任一个不超过 3
位的正整数。例如 234
应该被输出为 BBSSS1234
,因为它有 2
个“百”、3
个“十”、以及个位的 4
。
输入格式
每个测试输入包含 1 个测试用例,给出正整数 n(<1000)。
输出格式
每个测试用例的输出占一行,用规定的格式输出 n。
输入输出样例
输入样例 | 输出样例 |
---|---|
234 | BBSSS1234 |
23 | SS123 |
样例解释:无
题解 1
思路分析:数字范围很小,直接 if
判断所有可能。
#include<iostream>
using namespace std;
int main() {
int n;
cin >> n;
if(n <= 9) {
for(int i = 1; i <= n; i++) {
cout << i;
}
} else if(n <= 99) {
for(int i = 1; i <= n/10; i++) {
cout << 'S';
}
for(int i = 1; i <= n%10; i++) {
cout << i;
}
} else if(n <= 999) {
for(int i = 1; i <= n/100; i++) {
cout << 'B';
}
for(int i = 1; i <= n/10%10; i++) {
cout << 'S';
}
for(int i = 1; i <= n%10; i++) {
cout << i;
}
}
cout << endl;
return 0;
}
题解 2
题解 1 中,可直接借助 for
循环的条件,间接判定数字 n 的位数。自己体会。
#include<iostream>
using namespace std;
int main() {
int n;
cin >> n;
for(int i = 1; i <= n/100; i++) {
cout << 'B';
}
for(int i = 1; i <= n/10%10; i++) {
cout << 'S';
}
for(int i = 1; i <= n%10; i++) {
cout << i;
}
cout << endl;
return 0;
}