(python3)1056.组合数的和(15分)及1057.数零壹(20分)

1056.组合数的和 

题目如下:

给定N个非0的个位数字,用其中任意2个数字都可以组合成1个2位的数字。要求所有可能组合出来的2位数字的和。例如给定2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。
输入格式:
输入在一行中先给出N(1<N<10),随后是N个不同的非0个位数字。数字间以空格分隔。
输出格式:
输出所有可能组合出来的2位数字的和。
输入样例:
3 2 8 5
输出样例:

330

题目解析:

15分的题目仍然是十分简单,N个不同的数,又非0,也没有什么陷阱。代码如下:

input_num = input().split()
n = input_num[0]
input_num = list(map(int,input_num[1:]))
sum_nums = 0
for i in input_num:
    for j in input_num:
        if i == j:
            continue
        num = i * 10 + j
        sum_nums += num
print(sum_nums) 

1057 数零壹

题目如下


给定一串长度不超过10^5^的字符串,本题要求你将其中所有英文字母的序号(字母a-z对应序号1-26,不分大小写)相加,得到整数N,然后再分析一下N的二进制表示中有多少0、多少1。例如给定字符串“PAT (Basic)”,其字母序号之和为:16+1+20+2+1+19+9+3=71,而71的二进制是1000111,即有3个0、4个1。


输入格式:
输入在一行中给出长度不超过10^5^、以回车结束的字符串。
输出格式:
在一行中先后输出0的个数和1的个数,其间以空格分隔。


输入样例:
PAT (Basic)
输出样例:
3 4

题目解析:

也很直接的一道题,遍历字符串计算所需的和,转换为二进制,统计二进制(也需是字符串)中的0,1。注意bin函数的用法和结果格式("0b1000111"),因此count统计时减1。另外,如果所给字符串中没有字母a-z,和为0,我们应该输出0 0,这是一个测试点,虽然我不太认同这个==

string = input().lower()
sum_str = 0
for char in string:
    num = ord(char) - ord('a') + 1
    if num > 0 and num <= 26:
        sum_str += num
bin_str = bin(sum_str)
x = str(bin_str).count('0') - 1
y = str(bin_str).count('1')
if y == 0:
  print(0, 0)
else:
  print(x, y)

猜你喜欢

转载自blog.csdn.net/xutiantian1412/article/details/80527105