第4周 Python程序流程控制刷题(循环结构)

单击题目,直接跳转到页面刷题,一周后公布答案。

  1. P5722:数列求和
  2. B2054:求平均年龄
  3. B2059:奇数求和
  4. B2064:斐波那契数列
  5. B2077:角谷猜想
  6. B2098:整数去重
  7. B2128:素数个数

1. P5722:数列求和

题目描述

计算 1 + 2 + 3 + ⋯ + ( n − 1 ) + n 1+2+3+\cdots+(n-1)+n 1+2+3++(n1)+n 的值,其中正整数 n n n 不大于 100。由于你没有高斯聪明,所以你不被允许使用等差数列求和公式直接求出答案。

输入格式

输入一个正整数 n n n

输出格式

输出一个正整数,表示最后求和的答案。

样例 1

样例输入 1

100

样例输出 1

5050

提示

数据保证, 1 ≤ n ≤ 100 1 \leq n \leq 100 1n100

参考源码1:

n = int(input())
i = 1
sum = 0
while i <= n:
    sum += i
    i += 1
print(sum)

参考源码2:

n = int(input())
i = 1
sum = 0
while True:
    if i > n:
        break
    sum += i
    i += 1
print(sum)

参考源码3:

n = int(input())
sum = 0
for i in range(1, n+1):
    sum += i
print(sum)

2. B2054:求平均年龄

题目描述

班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位。

输入格式

第一行有一个整数 n n n 1 ≤ n ≤ 100 1 \le n \le 100 1n100),表示学生的人数。其后 n n n 行每行有 1 1 1 个整数,表示每个学生的年龄,取值为 15 15 15 25 25 25

输出格式

输出一行,该行包含一个浮点数,为要求的平均年龄,保留到小数点后两位。

样例 1

样例输入 1

2
18
17

样例输出 1

17.50

参考源码:

n = int(input())
sum = 0
for i in range(n):
    x = int(input())
    sum += x
avg = sum / n
print(f'{avg:.2f}')

3. B2059:奇数求和

题目描述

计算非负整数 m m m n n n(包括 m m m n n n)之间的所有奇数的和,其中, m m m 不大于 n n n,且 n n n 不大于 300 300 300。例如 m = 3 , n = 12 , m=3,n=12, m=3,n=12, 其和则为: 3 + 5 + 7 + 9 + 11 = 35 3+5+7+9+11=35 3+5+7+9+11=35

输入格式

两个数 m m m n n n,两个数以一个空格分开,其中 0 ≤ m ≤ n ≤ 300 0 \le m \le n \le 300 0mn300

输出格式

输出一行,包含一个整数,表示 m m m n n n(包括 m m m n n n)之间的所有奇数的和。

样例 1

样例输入 1

7 15

样例输出 1

55

参考源码1:

m, n = map(int, input().split())
sum = 0
for i in range(m, n+1):
    if i % 2:  # 奇数求和
        sum += i
print(sum)

参考源码2:

m, n = map(int, input().split())
sum = 0
for i in range(m, n+1):
    if i % 2 == 0:  # 偶数不求和
        continue
    sum += i
print(sum)

参考源码3:

m, n = map(int, input().split())
list1 = [x for x in range(m, n+1) if x % 2 == 1]
print(sum(list1))

4. B2064:斐波那契数列

题目描述

斐波那契数列是指这样的数列:数列的第一个和第二个数都为 1 1 1,接下来每个数都等于前面 2 2 2 个数之和。
给出一个正整数 a a a,要求斐波那契数列中第 a a a 个数是多少。

输入格式

1 1 1 行是测试数据的组数 n n n,后面跟着 n n n 行输入。每组测试数据占 1 1 1 行,包括一个正整数 a a a 1 ≤ a ≤ 30 1 \le a \le 30 1a30)。

输出格式

输出有 n n n 行,每行输出对应一个输入。输出应是一个正整数,为斐波那契数列中第 a a a 个数的大小。

样例 1

样例输入 1

4
5
2
19
1

样例输出 1

5
1
4181
1

参考源码1:

n = int(input())
for i in range(n):
    k = int(input())
    s1 = 0  # 前一项
    s2 = 1  # 当前项
    for j in range(k-1):
        s1, s2 = s2, s1+s2
        # tmp = s1 + s2
        # s1 = s2
        # s2 = tmp
    print(s2)

上述代码每次查询时,都要从头开始计算斐波那契数列的第k项,是不是太笨了?
本题中多次查询,查询的项不超过30,因此可以先求解出前30项,每次查询时直接输出即可。

参考源码2:

fib = [0, 1, 1]
for i in range(3, 31):
    fib.append(fib[i-1]+fib[i-2])
n = int(input())
for i in range(n):
    k = int(input())
    print(fib[k])

5. B2077:角谷猜想

题目描述

所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘 3 3 3 1 1 1,如果是偶数,则除以 2 2 2,得到的结果再按照上述规则重复处理,最终总能够得到 1 1 1。如,假定初始整数为 5 5 5,计算过程分别为 16 16 16 8 8 8 4 4 4 2 2 2 1 1 1
程序要求输入一个整数,将经过处理得到 1 1 1 的过程输出来。

输入格式

一个正整数 N ( N ≤ 2 , 000 , 000 ) N(N \le 2,000,000) N(N2,000,000)

输出格式

从输入整数到 1 1 1 的步骤,每一步为一行,每一部中描述计算过程。最后一行输出 End。如果输入为 1 1 1,直接输出 End

样例 1

样例输入 1

5

样例输出 1

5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
End

参考源码:

n = int(input())
while n != 1:
    if n % 2 == 1:
        print(f'{n}*3+1={n*3+1}')
        n = n*3 + 1
    else:
        print(f'{n}/2={n//2}')
        n //= 2  # 注意!不能用/
print('End')

6. B2098:整数去重

题目描述

给定含有 n n n 个整数的序列,要求对这个序列进行去重操作。所谓去重,是指对这个序列中每个重复出现的数,只保留该数第一次出现的位置,删除其余位置。

输入格式

输入包含两行:
第一行包含一个正整数 n n n 1 ≤ n ≤ 20000 1 \le n \le 20000 1n20000),表示第二行序列中数字的个数;
第二行包含 n n n 个整数,整数之间以一个空格分开。每个整数大于等于 10 10 10 、小于等于 100 100 100

输出格式

输出只有一行,按照输入的顺序输出其中不重复的数字,整数之间用一个空格分开。

样例 1

样例输入 1

5
10 12 93 12 75

样例输出 1

10 12 93 75

参考源码:

n = int(input())
list1 = list(map(int, input().split()))
list2 = []
for x in list1:
    if list2.count(x) == 0:
        list2.append(x)
print(*list2)

注意:本题要求去重后按照输入顺序输出,使用set去重,set是无序的,无法保证该顺序。

7. B2128:素数个数

题目描述

编程求 2 2 2 n ( n n(n n(n 为大于 2 2 2 的正整数)中有多少个素数。

输入格式

输入 n ( 2 ≤ n ≤ 50000 ) n(2 \le n \le 50000) n(2n50000)

输出格式

素数个数。

样例 1

样例输入 1

10

样例输出 1

4

参考源码:

素数是指除了1和自身之外,没有其它因子。素数测试最简单的方法是试除法,如果一个整数x是素数,则x除以区间[2,sqrt(x)]的任一个整数,均不能整除,如果有一个能够整除,则x不是素数。

n = int(input())
cnt = 0
for i in range(2, n+1):
    flag = True
    for j in range(2, int(i**0.5) + 1):
        if i % j == 0:
            flag = False
            break
    if flag:
        cnt += 1
print(cnt)

相关推荐

  1. 4 Python程序流程控制循环结构

    2024-03-24 05:30:04       17 阅读
  2. 4 Python程序流程控制

    2024-03-24 05:30:04       19 阅读
  3. 1 Python语法基础

    2024-03-24 05:30:04       20 阅读
  4. 2 Python列表、元组

    2024-03-24 05:30:04       21 阅读
  5. 7 Python函数(二)

    2024-03-24 05:30:04       11 阅读
  6. 8 Python面向对象编程

    2024-03-24 05:30:04       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-24 05:30:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-24 05:30:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-24 05:30:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-24 05:30:04       18 阅读

热门阅读

  1. Gin简介(Go web基础知识)

    2024-03-24 05:30:04       18 阅读
  2. oracle ADG主备切换

    2024-03-24 05:30:04       18 阅读
  3. Spring设计模式-实战篇之策略模式 + 工厂模式

    2024-03-24 05:30:04       21 阅读
  4. Android studio 简单入门程序

    2024-03-24 05:30:04       16 阅读
  5. 《过滤器模式(极简c++)》

    2024-03-24 05:30:04       21 阅读
  6. 快速入门Kotlin②控制流&函数

    2024-03-24 05:30:04       20 阅读
  7. kotlin中使用myibatis-plus的lambdaQuery的问题

    2024-03-24 05:30:04       14 阅读
  8. 数学,2549. 统计桌面上的不同数字

    2024-03-24 05:30:04       20 阅读
  9. 使用maxwell实时同步mysql数据到kafka

    2024-03-24 05:30:04       16 阅读
  10. 探索DevOps:10款必备免费工具

    2024-03-24 05:30:04       14 阅读
  11. [小程序开发] 转发、分享到朋友圈

    2024-03-24 05:30:04       14 阅读