- 7-1 生成3的乘方表
- 7-2 统计素数并求和
- 7-3 猴子吃桃问题
- 7-4 验证“哥德巴赫猜想”
- 7-5 求e的近似值
- 7-6 输出前 n 个Fibonacci数
- 7-7 统计学生平均成绩与及格人数
- 7-8 求分数序列前N项和
- 7-9 查询水果价格
- 7-10 最大公约数和最小公倍数
输入一个非负整数n,生成一张3的乘方表,输出
的值。可调用幂函数计算3的乘方。
输入格式:
输入在一行中给出一个非负整数n。
输出格式:
按照幂的递增顺序输出n+1行,每行格式为“pow(3,i) = 3的i次幂的值”。题目保证输出数据不超过长整型整数的范围。
输入样例:
3
输出样例:
pow(3,0) = 1
pow(3,1) = 3
pow(3,2) = 9
pow(3,3) = 27
思路:
因为求的是幂,我们可以使用math库中的pow方法math.pow(3,i)来非常迅速的解决
注意:需要import math,要不然找不到对应的方法的
代码区:
import math
n = int(input())
for i in range(n + 1):
print("pow(3,{:d}) = {:d}".format(i, int(math.pow(3,i))))
7-2 统计素数并求和
本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
输入样例:
10 31
输出样例:
7 143
思路:
需要对是否是素数进行判断,所以我们先写一个专门用来判断是否是素数的方法isPrime.很显然,1不是素数,2是素数,素数的满足条件是什么就不用我多说了吧,我们对从3开始的数到n开始进行判断,如果能n能被整除就不是素数,如果到n为之都没有返回不是素数,那么他就是素数.返回true
然后我们写主函数,从最小的开始for循环,直到最大数为之,一旦发现素数就累加器加一然后累加到sum中
代码区:
def isPrime(n):
if n == 1:
return False
if n == 2:
return True
for i in range(2, n):
if n % i == 0:
return False
return True
min, max = [int(num) for num in input().split()]
cnt = 0
sum = 0
for num in range(min, max + 1):
if isPrime(num):
cnt += 1
sum += num
print(cnt, sum)
7-3 猴子吃桃问题
一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第N天早上想再吃时,见只剩下一个桃子了。问:第一天共摘了多少个桃子?
输入格式: 输出格式: 输入样例: 思路: 代码区: 数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。 输入格式: 输出格式: 输入样例: 思路: 代码区: 自然常数 e 可以用级数 1+1/1!+1/2!+⋯+1/n!+⋯ 来近似计算。本题要求对给定的非负整数 n,求该级数的前 n+1 项和。 输入格式: 输出格式: 输入样例: 思路: 代码区: 本题要求编写程序,输出菲波那契(Fibonacci)数列的前N项,每行输出5个,题目保证输出结果在长整型范围内。Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列,例如:1,1,2,3,5,8,13,…。 输入格式: 输出格式: 如果N小于1,则输出"Invalid." 输入样例1: 思路: 代码区: 本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。 输入格式: 输出格式: average = 成绩均值 输入样例: 思路: 首先因为需要求平均数,所以先求和,我这是先都放到列表中然后使用自带的sum函数求和,然后除以数量就是平均数了 代码区: 本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+… 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。 输入格式: 输出格式: 输入样例: 代码区: 给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。 首先在屏幕上显示以下菜单: [1] apple 输入格式: 输出格式: 输入样例1: 思路: 代码区: 本题要求两个给定正整数的最大公约数和最小公倍数。 输入格式: 输出格式: 输入样例: 思路: 代码区: 新手上路,有错请指正; 欢迎分享,转载请注明来源:内存溢出
输入在一行中给出正整数N(1
在一行中输出第一天共摘了多少个桃子。
3
输出样例:
10
对于这种问题不可以正着来思考会很烦,我们倒着想,最后一天只有一个,加上上一天多吃的一个就是两个,然后再加上一半也就是等于4个,这样就推断出倒数第二天一开始有的桃子数,以此类推就可以得到第一天的桃子数了.
7-4 验证“哥德巴赫猜想”
n = int(input())
picth = 1
for i in range(n - 1):
picth += 1
picth *= 2
print(picth)
输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。
在一行中按照格式“N = p + q”输出N的素数分解,其中p ≤ q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。
24
输出样例:
24 = 5 + 19
也是一道需要对素数进行判断的,所以我们直接复制上面写好的isPrime方法来继续用.不过因为这个题目数据比较大,所以进行了优化,对循环范围进行了缩小,因为不可能整除一个比自己的根号2倍大的数还可以等于0.
对素数判断的方法写好了就简单了,只需要进行从2到n的循环,发现一个素数就把n-该素数也进行素数的判断,如果也是素数就是符合条件的数了.
7-5 求e的近似值
import math
def isPrime(n):
if n == 1:
return False
if n == 2:
return True
for i in range(2, int(math.sqrt(n)) + 1):
if n % i == 0:
return False
return True
n = int(input())
rest = 0
for i in range(2, n):
if isPrime(i):
rest = n - i
if isPrime(rest):
print("{:d} = {:d} + {:d}".format(n, i, rest))
break
输入第一行中给出非负整数 n(≤1000)。
在一行中输出部分和的值,保留小数点后八位。
10
输出样例:
2.71828180
很显然可以看出分母是一个阶乘,所以我们先定义一个求阶乘的方法(忽略我这里的方法名qwq),只需要用for循环进行累乘就可以了
然后按照式子的格式就可以得出结果了,注意格式问题,保留8位小数
7-6 输出前 n 个Fibonacci数
def mi(n):
num = 1
for i in range(1, n + 1):
num *= i
return num
m = int(input())
res = 1
for i in range(1, m + 1):
res += 1/mi(i)
print("{:.8f}".format(res))
输入在一行中给出一个整数N(1≤N≤46)。
输出前N个Fibonacci数,每个数占11位,每行输出5个。如果最后一行输出的个数不到5个,也需要换行。
7
输出样例1:
1 1 2 3 5
8 13
输入样例2:
0
输出样例2:
Invalid.
首先排除一些情况,当输入小于1的时候就输出Invalid.
因为求的是斐波那契数列,所以第一个和第二个数字都是1,我们先把这两个给定义好,然后用动态规划的思想,每次都使新的n1等于原来的n2,然后再使n2变成新n1+原来的n2.这样就实现了每个数都是前两个数之和.
然后格式问题需要注意,print后面要有一个end =''要不然会换行,同时没输出一个数就使累加器加一,等到5时就换行
还有就是如果结束前的一个数之后也要进行换行.
7-7 统计学生平均成绩与及格人数
n = int(input())
n1 = 1
n2 = 1
c = 0
if n < 1:
print("Invalid.")
else:
for i in range(n):
if i == 0:
print("{:11d}".format(n1), end = '')
c += 1
elif i == 1:
print("{:11d}".format(n2), end = '')
c += 1
else:
print("{:11d}".format(n1 + n2), end = '')
n1, n2 = n2, n1 + n2
c += 1
if c % 5 == 0:
print()
elif i == n - 1:
print()
输入在第一行中给出非负整数N,即学生人数。第二行给出N个非负整数,即这N位学生的成绩,其间以空格分隔。
按照以下格式输出:
count = 及格人数
其中平均值精确到小数点后一位。
5
77 54 92 73 60
输出样例:
average = 71.2
count = 4
然后按照格式输出我们需要的就可以了
7-8 求分数序列前N项和
n = int(input())
if n == 0:
print("average = 0.0")
print("count = 0")
else:
scores = [int(score) for score in input().split()]
average = sum(scores) / n
c = 0
for score in scores:
if score >= 60:
c += 1
print("average = {:.1f}".format(average))
print("count = {:d}".format(c))
输入在一行中给出一个正整数N。
在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。
20
输出样例:
32.66
思路:
总结规则,可以发现这个式子是一开始分子为2,分母为1,然后每一次都是新分子为上一个的分子分母相加,然后新分母等于上一个的分子
所以我们对于初始化的2/1累加之后就先得到新的分子分母然后再通过for循环来完成累加
7-9 查询水果价格
n = int(input())
fenzi = 2
fenmu = 1
sum = 0
for i in range(n):
sum += fenzi / fenmu
fenzi2 = fenzi + fenmu
fenmu2 = fenzi
fenzi = fenzi2
fenmu = fenmu2
print("{:.2f}".format(sum))
[2] pear
[3] orange
[4] grape
[0] exit
用户可以输入编号1~4查询对应水果的单价。当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0。
输入在一行中给出用户连续输入的若干个编号。
首先在屏幕上显示菜单。然后对应用户的每个输入,在一行中按格式“price = 价格”输出查询结果,其中价格保留两位小数。当用户连续查询次数超过5次、或主动输入0时,程序结束。
3 -1 0 2
输出样例1:
[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
price = 4.10
price = 0.00
输入样例2:
1 2 3 3 4 4 5 6 7 8
输出样例2:
[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
price = 3.00
price = 2.50
price = 4.10
price = 4.10
price = 10.20
一看这题,果断使用赖皮方法嘿嘿,还好数据量不大,所以直接按照输入的进行判断然后直接输出就可以了,不过还需要对于次数进行判断,一旦等于5次就退出
还有需要注意是输入为0也要输出price不过价格为0.00
7-10 最大公约数和最小公倍数
print("[1] apple")
print("[2] pear")
print("[3] orange")
print("[4] grape")
print("[0] exit")
n = 0
choose = input().split()
for c in choose:
if c == '1':
print("price = 3.00")
n += 1
if n == 5:
break
elif c == '2':
print("price = 2.50")
n += 1
if n == 5:
break
elif c == '3':
print("price = 4.10")
n += 1
if n == 5:
break
elif c == '4':
print("price = 10.20")
n += 1
if n == 5:
break
elif c == '0':
break
else:
print("price = 0.00")
n += 1
if n == 5:
break
输入在一行中给出两个正整数M和N(≤1000)。
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
511 292
输出样例:
73 2044
最大公约数我们可以从两数中比较小的开始递减来求,给range里面加一个-1就是表示递减,只要满足能被两个数都整除的就是最大公约数(因为是从大往小循环的,所以只要一找到就是最大的了)找到之后退出循环
最小公倍数需要从两数中大的开始找,一旦这个数可以把我们的两个数都整除那么他就是公倍数,由于是从两数中最大的开始找的,所以肯定是最小的公倍数,找到就退出循环
输出需要注意的是不要换行,第一个输出之后加一个空格n, m = input().split()
n = int(n)
m = int(m)
if n > m:
n, m = m, n
for i in range(n, 0, -1):
if n % i == 0 and m % i == 0:
print(i, end = ' ')
break
c = m
while True:
if c % n == 0 and c % m == 0:
print(c, end = '')
break
c += 1
评论列表(0条)