题目地址:https://www.patest.cn/contests/pat-b-practise/1016
题目描述:
正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA。例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6。
现给定A、DA、B、DB,请编写程序计算PA + PB。
输入格式:
输入在一行中依次给出A、DA、B、DB,中间以空格分隔,其中0 < A, B < 1010。
输出格式:
在一行中输出PA + PB的值。
输入样例1:
3862767 6 13530293 3
输出样例1:
399
输入样例2:
3862767 1 13530293 8
输出样例2:
0
题意:
输入四个数 A、DA、B、DB,其中 DA 跟 DB 都是单个数字。将 A 中的数字 DA 全部拼在一起得到 PA,将 B 中的数字 DB 全都拼在一起得到 PB,输出 PA + PB。
样例解释:
样例 1:
A = 3862767,DA = 6 ;
B = 13530293 ,DB = 3
这样 6 在 A 中出现了两次,因此 PA = 66 ;而 3 在 B 中出现了三次,因此 PB = 333
最后输出 66 + 333 = 399。
样例 2:
A = 3862767,DA = 1;
B = 13530293,DB = 8.
这样 1 在 A 中出现了 0 次,因此 PA = 0;而 8 在 B 中出现了 0 次,因此 PB = 0。
最后输出 0 + 0 = 0。
解题思路:
令 PA 初值均为 0 ,枚举 A 中的每一位,如果该位恰好等于 DA,则令 PA = PA * 10 + DA,这样当枚举完 A 中的每一位之后,就得到了 PA。
同理,可以得到 PB。最后输出 PA + PB 即可。
注意:由于题目中给出的范围是10的10次方以内,这个范围是超过了 int 的,因此需要使用 long long 来存放 A 和 B。不过也可以用字符串来存储 A 和 B,方法其实都是一样的。
C++完整代码如下:
#include<cstdio>
int main(){
long long a, b, da, db;
scanf("%lld%lld%lld%lld", &a, &da, &b, &db);
long long pa = 0, pb = 0;
while(a != 0){ //枚举 a 的每一位
if(a % 10 == da) pa = pa * 10 + da; //若当前位为 da,给 pa 增加一位 da
a = a / 10;
}
while(b != 0){ //枚举 b 的每一位
if(b % 10 == db) pb = pb * 10 + db;
b = b / 10;
}
printf("%lld\n", pa + pb);
return 0;
}
python 完整代码如下:
#coding=utf-8
def count(a,b):
count=0
for i in a:
if i==b:
count=count*10+int(b)
return count
s=raw_input()
a,b,c,d=s.split(" ")
print count(a,b)+count(c,d)