PAT :计算机程序设计能力考试:一个高校编程学习赛,内容基础,据说题目描述含糊不清,造成诸多理解错误。
第一观感是:输入输出样例极少,未给学生充分理解题目,提供更多辅助。
PAT 乙级:只涉及基础编程,最难到排序算法。适合基础语法学习阶段的同学。
问题描述
正整数 A 的“ D A D_A DA (为 1 位整数)部分”定义为由 A 中所有 D A D_A DA 组成的新整数 P A P_A PA。例如:给定 A = 3862767 A = 3862767 A=3862767, D A = 6 D_A = 6 DA=6,则 A 的“6 部分” P A P_A PA 是 66,因为 A 中有 2 个 6。
现给定 A 、 D A 、 B 、 D B A、D_A、B、D_B A、DA、B、DB ,请编写程序计算 P A + P B P_A + P_B PA+PB。
输入格式
输入在一行中依次给出 A 、 D A 、 B 、 D B A、D_A、B、D_B A、DA、B、DB,中间以空格分隔,其中 0 < A , B < 1 0 9 0<A,B<10^9 0<A,B<109 。
输出格式
在一行中输出 P A + P B P_A + P_B PA+PB 的值。
输入输出样例
输入样例 | 输出样例 |
---|---|
3862767 6 13530293 3 | 399 |
3862767 1 13530293 8 | 0 |
样例解释:无
题解 1
思路分析:面向答案编程,int createP(int a, int da)
,根据给定的内容,计算出
P
A
P_A
PA。
#include <iostream>
#include <cmath>
using namespace std;
int createP(int a, int da);
int main() {
int a, da, b, db;
cin >> a >> da >> b >> db;
int pa = createP(a, da);
int pb = createP(b, db);
cout << pa + pb << endl;
return 0;
}
int createP(int a, int da) {
int pa = 0;
int cnt = 0;
while(a) {
int tmp = a % 10;
if(tmp == da) cnt ++;
a /= 10;
}
while(cnt) {
pa += da * pow(10, --cnt);
}
return pa;
}