python循环语句s=2+22+222+2222之和_python算法题
最近看了python的语法,但是总感觉不知道怎么使⽤它,还是先来敲敲⼀些简单的程序吧。
1.题⽬:有1、2、3、4个数字,能组成多少个互不相同且⽆重复数字的三位数?都是多少?
程序分析:可填在百位、⼗位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满⾜条件的排列。
if __name__ == "__main__":
s = (1,2,3,4)
for a in s:
for b in s:
for c in s:
if a != b and b != c and c != a:
print "%d%d%d" %(a,b,c)
2.题⽬:⼀个整数,它加上100后是⼀个完全平⽅数,再加上268⼜是⼀个完全平⽅数,请问该数是多少?
程序分析:在10万以内判断,先将该数加上100后再开⽅,再将该数加上268后再开⽅,如果开⽅后的结果满⾜如下条件,即是结果。请看具体分析:
from math import sqrt
if __name__ == "__main__":
i = 1
while i < 100000:
a = int(sqrt(i + 100))
b = int(sqrt(i + 268))
if a **2 == (i + 100) and b **2 == (i + 268):
print i
i += 1
3.题⽬:输⼊某年某⽉某⽇,判断这⼀天是这⼀年的第⼏天?
程序分析:以3⽉5⽇为例,应该先把前两个⽉的加起来,然后再加上5天即本年的第⼏天,特殊情况,闰年且输⼊⽉份⼤于3时需考虑多加⼀天。
if __name__ == "__main__":
days = {1:0,2:31,3:59,4:90,5:120,6:151,7:181,8:212,9:243,10:273,11:304,12:334}
year,month,day = input("year:"),input("month:"),input("day:")
if not days.has_key(month):
print "error input"
sum = days[month] + day
if month >= 2:
if year %400 == 0 or (year % 4 == 0 and year % 100 != 0):
sum += 1
print "it is the %dth day of the year." % sum
4.题⽬:输⼊三个整数x,y,z,请把这三个数由⼩到⼤输出。
程序分析:我们想办法把最⼩的数放到x上,先将x与y进⾏⽐较,如果x>y则将x与y的值进⾏交换,然后再⽤x与z进⾏⽐较,如果x>z则将x 与z的值进⾏交换,这样能使x最⼩。
if __name__ == "__main__":
a,b,c = input(),input(),input()
if a > b: a,b = b,a
if a > c: a,c = c,a
if b > c: b,c = c,b
print "small to big: %d,%d,%d" %(a,b,c)
或者:
if __name__ == "__main__":
s = [input(),input(),input()]
s.sort()
print "small to big: %s" %s
5.题⽬:输出9*9⼝诀。
程序分析:分⾏与列考虑,共9⾏9列,i控制⾏,j控制列。
if __name__ == "__main__":
for i in range(1,10):
for j in range(1,10):
print "%d*%d = %-3d" %(i,j,i*j),
print
6.题⽬:要求输出国际象棋棋盘。
程序分析:⽤i控制⾏,j来控制列,根据i+j的和的变化来控制输出⿊⽅格,还是⽩⽅格。
if __name__ == "__main__":
for i in range(8):
for j in range(8):
if (i + j) % 2 == 0:
print "%c"%219,else:
print "a",
print
7.题⽬:古典问题:有⼀对兔⼦,从出⽣后第3个⽉起每个⽉都⽣⼀对兔⼦,⼩兔⼦长到第三个⽉后每个⽉⼜⽣⼀对兔⼦,假如兔⼦都不死,问每个⽉的兔⼦总数为多少?
程序分析: 兔⼦的规律为数列1,1,2,3,5,8,
if __name__ == "__main__":
f1,f2 = 1,1
print "1: %d" %f1
print "2: %d" %f2
for i in range(3,21,2):
f1 = f1 + f2
print "%d: %d" %(i,f1)
f2 = f1 + f2
print "%d: %d" %(i+1,f2)
8.题⽬:判断101-200之间有多少个素数,并输出所有素数。
程序分析:判断素数的⽅法:⽤⼀个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
from math import sqrt
if __name__ == "__main__":
count = 0
flag = 1
for a in range(101,201):
s = int(sqrt(a))
for i in range(2,s+1):
if a % i == 0:
flag = 0
break
if flag == 1:
count += 1
print a
else:
flag = 1
print "the total num is %d" %count
9.题⽬:打印出所有的“⽔仙花数”,所谓“⽔仙花数”是指⼀个三位数,其各位数字⽴⽅和等于该数本⾝。例如:153是⼀个“⽔仙花数”,因为153=1的三次⽅+5的三次⽅+3的三次⽅。
程序分析:利⽤for循环控制100-999个数,每个数分解出个位,⼗位,百位。
if __name__ == "__main__":
print "water flower number is :",
for a in range(100,1000):
x,y,z = a/100,a/10%10,a%10
if x**3 + y**3 + z**3 == a:
print "%d,"%a,
10.题⽬:将⼀个正整数分解质因数。例如:输⼊90,打印出90=2*3*3*5。
程序分析:对n进⾏分解质因数,应先到⼀个最⼩的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并⽤n除以k的商,作为新的正整数你n,重复执⾏第⼀步。
(3)如果n不能被k整除,则⽤k+1作为k的值,重复执⾏第⼀步。
if __name__ == "__main__":
n = input("please enter a number:")
print "%d = " %n,
for k in range(2,n+1):
while n != k:
if n % k == 0:
n = n/k
import语句print "%d * " %k,
else:
break
print n
11.题⽬:输⼊两个正整数m和n,求其最⼤公约数和最⼩公倍数。
程序分析:利⽤辗除法。
if __name__ == "__main__":
print "please enter two numbers:"
s = [input(),input()]
s.sort()
a,b = s[0],s[1]
while b != 0:
t = a % b
a = b
b = t
print "common divisor:%d"%a
print "common multiple:%d"%int(s[0]*s[1]/a)
12.题⽬:求s=a+aa+aaa+a的值,其中a是⼀个数字。例如2+22+222+2222+22222(此时共有5个数相加),⼏个数相加有键盘控制。
程序分析:关键是计算出每⼀项的值。
if __name__ == "__main__":
print "please enter a and n:"
a,n = [input(),input()]
sum = a
if n > 1:
b = a
for i in range(2,n+1):
b = a + b*10
print b
sum += b
print "a+aa+aaa+... = %ld " %sum
13.题⽬:⼀个数如果恰好等于它的因⼦之和,这个数就称为“完数”。例如6=1+2+3.编程出1000以内的所有完数。
程序分析:因⼦就是所有可以整除这个数的数,不包括这个数⾃⾝。
if __name__ == "__main__":
for n1 in range(3,1001):
sum = 1
n = n1
for k in range(2,n+1):
while n != k:
if n % k == 0:
n = n/k
sum += k
else:
break
sum += n
if sum == n1:
print sum

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。