您的位置:首页 > 其它

PAT B1016 部分A+B

2016-07-23 11:57 246 查看
题目地址: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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PAT乙级