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)