1001 害死人不偿命的(3n+1)猜想
问题描述:
卡拉兹(Callatz)猜想:
对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证 (3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……
我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过 1000 的正整数 n,简单地数一下,需要多少步(砍几下)才能得到 n=1?
输入说明:
每个测试输入包含 1 个测试用例,即给出正整数 n 的值。
输出说明:
输出从 n 计算到 1 需要的步数。
输入样列:
3
输出样列:
5
代码:
ans = 0
n = int(input())
while n != 1:
if (n % 2 == 1):
n = (n * 3 + 1) // 2
else:
n /= 2
ans += 1
print(ans)
1006 换个格式输出整数
问题描述:
让我们用字母 B 来表示“百”、字母 S 表示“十”,用 12…n 来表示不为零的个位数字 n(<10),换个格式来输出任一个不超过 3 位的正整数。例如 234 应该被输出为BBSSS1234,因为它有 2 个“百”、3 个“十”、以及个位的 4。
输入说明:
每个测试输入包含 1 个测试用例,给出正整数 n(<1000)。
输出说明:
每个测试用例的输出占一行,用规定的格式输出 n。
输入样列:
234
输出样列:
BBSSS1234
代码:
n = int(input())
if (n >= 100):
for i in range(n // 100):
print('B', end='')
n %= 100
if (n >= 10):
for i in range(n // 10):
print('S', end='')
n %= 10
for i in range(1, n + 1):
print("%d" % i, end='')
print()
1011 A+B和C
问题描述:
给定区间 [−231,231] 内的 3 个整数 A、B 和 C,请判断 A+B 是否大于 C。
输入说明:
输入第 1 行给出正整数 T (≤10),是测试用例的个数。随后给出 T 组测试用例,每组占一行,顺序给出 A、B 和 C。整数间以空格分隔。
输出说明:
对每组测试用例,在一行中输出 Case #X: true 如果 A+B>C,否则输出 Case #X: false,其中 X 是测试用例的编号(从 1 开始)。
输入样列:
4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647
输出样列:
Case #1: false
Case #2: true
Case #3: true
Case #4: false
代码:
t = int(input())
for i in range(1, t + 1):
a, b, c = map(int, input().split())
if (a + b > c):
print("Case #%d: true" % i)
else:
print("Case #%d: false" % i)
1012 数字分类
问题描述:
给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:
A1 = 能被 5 整除的数字中所有偶数的和;
A2 = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1−n2+n3−n4⋯;
A3 = 被 5 除后余 2 的数字的个数;
A4 = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;
A5 = 被 5 除后余 4 的数字中最大数字。
输入说明:
每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N,随后给出 N 个不超过 1000 的待分类的正整数。数字间以空格分隔。
输出说明:
对给定的 N 个正整数,按题目要求计算 A1~A5 并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。
若其中某一类数字不存在,则在相应位置输出 N。
输入样列:
13 1 2 3 4 5 6 7 8 9 10 20 16 18
输出样列:
30 11 2 9.7 9
代码:
注意判断A2为0还是N,最后一个测试点A2值为0,所以如果靠判断A2的值来判断是否为N最后一个点会过不了,所以这里用cnt2来记录满足条件的A2的数顺便判断是否为N
n, *num = map(int, input().split())
a1, a2, a3, a4, a5 = 0, 0, 0, 0, 0
cnt2, cnt4 = 0, 0
for i in num:
if i % 5 == 0 and i % 2 == 0:
a1 += i;
if i % 5 == 1:
a2 += (-1) ** cnt2 * i
cnt2 += 1
if i % 5 == 2:
a3 += 1
if i % 5 == 3:
a4 += i
cnt4 += 1
if i % 5 == 4:
a5 = max(a5, i)
if a1 == 0:
print('N', end=' ')
else:
print(a1, end=' ')
if cnt2 == 0:
print('N', end=' ')
else:
print(a2, end=' ')
if a3 == 0:
print('N', end=' ')
else:
print(a3, end=' ')
if a4 == 0:
print('N', end=' ')
else:
print("%.1f" % float(a4 / cnt4), end=' ')
if a5 == 0:
print('N')
else:
print(a5)
1017 A除以B
问题描述:
本题要求计算 A/B,其中 A 是不超过 1000 位的正整数,B 是 1 位正整数。你需要输出商数 Q 和余数 R,使得 A=B×Q+R 成立。
输入说明:
输入在一行中依次给出 A 和 B,中间以 1 空格分隔。
输出说明:
在一行中依次输出 Q 和 R,中间以 1 空格分隔。
输入样列:
123456789050987654321 7
输出样列:
17636684150141093474 3
代码:
a,b = map(int,input().split())
print(divmod(a,b)[0],divmod(a,b)[1])
1023 组个最小数
问题描述:
给定数字 0-9 各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意 0 不能做首位)。例如:给定两个 0,两个 1,三个 5,一个 8,我们得到的最小的数就是 10015558。
现给定数字,请编写程序输出能够组成的最小的数。
输入说明:
输入在一行中给出 10 个非负整数,顺序表示我们拥有数字 0、数字 1、……数字 9 的个数。整数间用一个空格分隔。10 个数字的总个数不超过 50,且至少拥有 1 个非 0 的数字。
输出说明:
在一行中输出能够组成的最小的数。
输入样列:
2 2 0 0 0 3 0 0 1 0
输出样列:
10015558
代码:
enumerate()
函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标
enumerate(sequence, [start=0])
- sequence – 一个序列、迭代器或其他支持迭代对象。
- start – 下标起始位置。
enumerate(num[1:],1)就是从num下标为1的数开始,并且初始下标为1
num = list(map(int, input().split()))
ans = []
for i, j in enumerate(num[1:],1):
if j != 0:
ans.append(str(i))
num[i] -= 1
break
for i, j in enumerate(num):
ans.append(str(i) * j)
print(''.join(ans))
1036 跟奥巴马一起编程
问题描述:
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014 年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!
输入说明:
输入在一行中给出正方形边长 N(3≤N≤20)和组成正方形边的某种字符 C,间隔一个空格。
输出说明:
输出由给定字符 C 画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的 50%(四舍五入取整)。
输入样列:
10 a
输出样列:
aaaaaaaaaa
a a
a a
a a
aaaaaaaaaa
代码:
这题唯一要注意的就是四舍五入取整
s = input().split()
n = int(s[0])
c = s[1]
if n % 2 != 0:
k = n // 2 + 1
else:
k = n // 2
print(c * n)
for i in range(k - 2):
print(c, end='')
print(' ' * (n - 2), end='')
print(c)
print(c * n)