作业1-02-python基本语法

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)
发布了28 篇原创文章 · 获赞 0 · 访问量 855

猜你喜欢

转载自blog.csdn.net/weixin_43866408/article/details/104797731
今日推荐