python循环练习题(1)

1010 - 找出二五仔的ID

我们的双面特工发来一条简短的消息:“二五仔就是二五仔,除了在生的!”
主管一听就说:不好,我们那1000名特工(ID从1到1000)里有叛徒,他们的ID既能被2整除,又能被5整除,但不被3整除!快把他们揪出来!

输入

输出

从小到大,每行一个,输出叛徒的ID

for i in range(1,1001):
    if i % 2 == 0 and i % 5 == 0 and i % 3 !=0:
        print(i)

1013 - 等额本金

描述:小明从银行贷款3万元。约定分24个月,以等额本金方式还款。 

   这种还款方式就是把贷款额度等分到24个月。每个月除了要还固定的本金外,还要还贷款余额在一个月中产生的利息。 

   假设月利率是:0.005,即:千分之五。那么, 

   第一个月,小明要还本金 1250, 还要还利息:30000 * 0.005,总计 1400 
   第二个月,本金仍然要还 1250, 但利息为:(30000-1250) * 0.005 总计 1393.75 

   请问:小明在第15个月,应该还款多少(本金和利息的总和)? 

   请把答案金额四舍五入后,保留两位小数。注意:32.5,一定要写为:32.50

输入

输出

一个两位小数的浮点数, 作为第15个月应该还款的数值

p = 30000
r = 0.005
n = 24
b = 1250
res = b + (p - b * 14) * r
print('%.2f'%res)

# 每月的利息可以通过以下公式计算:
# 第一个月的利息 = P × r
# 第二个月的利息 = (P - 第一个月的本金) × r
# 以此类推,第n个月的利息 = (P - (n-1) × 第一个月的本金) × r

1015 - 十进制整数的各个数字

已知一个十进制整数N,输出它的个位上的数字,十位上的数字,百位上的数字,……

输入

十进制整数N

输出

若干行,分别是
N的个位上的数字
N的十位上的数字
N的百位上的数字
N的千位上的数字
……

d = int(input())
if d < 0:
    d = -d
while d:        #这行代码开始一个while循环,条件是d不为0。当d为0时,循环结束
    print(d % 10)    #在循环内部,这行代码打印d的个位数。这是通过取模运算%实现的,该运算返回除法操作的余数。
    d //= 10    #这行代码将d除以10并向下取整。这实际上是将d中的个位数去掉,因为整数除以10的结果就是去掉个位数

1021 - 十六进制整数的各个数字

已知一个整数N(十进制形式),输出它的十六进制形式下,最低位上的数字,次低位上的数字,……,最高位上的数字

输入

十进制整数N

输出

若干行,分别是十六进制形式下的
最低位上的数字,
次低位上的数字,
……,
最高位上的数字

N = int(input())  # 从标准输入读取一个字符串,转换为整数,并存储在变量N中。  
if N < 0:         # 检查N是否为负数。  
    N = -N        # 如果N是负数,则取其绝对值。  
A = "%X" % N      # 使用格式化字符串将整数N转换为大写的十六进制字符串,并存储在变量A中。  
print(*A[::-1], sep="\n")  # 将A中的字符逆序排列,并使用*号将其解包为独立的参数传递给print函数,每个字符之间用换行符分隔。

1043 - 逆序整数

给出一个不多于8位的整数,要求:
1、求出它是几位数 
2、分别输出每一位数字(空格隔开)
3、按逆序输出各位数字,例如原数为321,应输出123

输入

一个整数(0-99999999)

输出

三行。
第一行:位数 
第二行:用空格分开的每个数字,注意最后一个数字后没有空格
第三行 逆序后的整数

n = input()
list(n)
print(len(n))
print(" ".join(n))        #使用空格将字符串n中的字符连接起来,并打印结果。
print(int(n[::-1]))       #打印字符串n的反向字符串转换为整数后的结果

1045 - 最大公约数与最小公倍数

输入两个正整数m和n,求其最大公约数和最小公倍数。

输入

两个整数,空格隔开

输出

最大公约数,最小公倍数,空格隔开

m,n = map(int,input().split())
k = min(m,n)        #找到m和n中的较小值,并将其赋值给k
for i in range(k,0,-1):    #从k开始,以步长-1递减到1。
    if m%i == 0 and n%i == 0:    #检查i是否同时是m和n的约数
        gcd = i                #如果i是m和n的约数,那么i就是最大公约数(gcd)
        break
lcm = min(m, n)    
max_num = max(m, n)        #找到m和n中的较大值,并将其赋值给max_num
for i in range(2, max_num + 1):  
    if lcm * i % m == 0 and lcm * i % n == 0:    #检查lcm乘以i是否同时是m和n的倍数。
        lcm *= i        #如果lcm乘以i是m和n的倍数,那么更新lcm的值。
        break
print(gcd,lcm)

1047 - n个a的数列和

求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,
其中a是单个数字(1至9),n是正整数。
例如a=2,n=5时:
2+22+222+2222+22222=24690

输入

a和n两个整数,空格隔开。

输出

1个整数,表示Sn的值。

# 仔细观察可以发现一个规律,
#Sn=a+aa+aaa+…+aa…aaa(有n个a)==> Sn=a*10+a
def add(m,n):
    sn = 0
    sum = 0
    for i in range(1,n+1):
        sn = sn*10+m        #第一项就是 0*10+2,
        sum += sn           #将2传入sum中,开始第二遍循环,此时sn=2,sum=2,所以第二项就是:2*10+2=22,
    return sum
a,b=map(int,input().split())
print(add(a,b))

1048 - 阶乘数列和

求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字。

输入

1个正整数n(1

输出

1个整数Sn

#阶乘
#Sn=1!+2!+3!+4!+5!
# ==>  Sn= 1 + 1x2 + 1x2x3 + 1x2x3x4 + 1x2x3x4x5 = 153
n = int(input())
sn = 1
sum = 0
for i in range(1,n+1):
    sn = sn * i
    sum += sn
print(sum)

1050 - 水仙花数

打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。 例如:153是一个水仙花数,因为153=1^3+5^3+3^3。

输入

输出

所有的水仙花数,从小的开始。 每行一个

for i in range(100,1000):
    #获取百位数数字、十位数数字、个位数数字
    b = i //100
    s = i //10 % 10
    g = i % 10
    #判断百位数数字三次方加十位数数字的三次方加个位数数字的三次方是否等于它本身,如果是就是水仙花数。
    if b ** 3 + s ** 3 + g ** 3 == i:
        print(i)

1052 - 求分数序列之和

有一分数序列: 2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前N项之和,保留两位小数。

输入

N

输出

数列前N项和

n = int(input())
s = 0.0
a = 2.0
b = 1.0
for n in range(1,n+1):
    s += a / b
    b,a = a , a + b
print (round(s,2))

你可能感兴趣的:(python,python)