C语言经典100例(Python版本)016-020


'''
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。   
1.程序分析:利用辗除法。
'''
num1 = int(raw_input('input a = :\n'))
num2 = int(raw_input('input b = :\n'))
if num1  num2:
    num1,num2 = num2,num1
a = num1
b = num2
while b != 0:
    temp = a % b
    a = b
    b = temp
print a
print num1 * num2 / a
'''
【程序17】
题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
1.程序分析:利用while语句,条件为输入的字符不为'\n'.
      
2.程序源代码:
'''
import string
s = raw_input('input a string:\n')
letters = 0
space = 0
digit = 0
others = 0
for c in s:
    if c.isalpha():
        letters += 1
    elif c.isspace():
        space += 1
    elif c.isdigit():
        digit += 1
    else:
        others += 1
print 'char = %d,space = %d,digit = %d,others = %d' % (letters,space,digit,others)
'''
题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时
   共有5个数相加),几个数相加有键盘控制。
1.程序分析:关键是计算出每一项的值。
2.程序源代码:
'''
Tn = 0
Sn = []
n = int(raw_input('n = :\n'))
a = int(raw_input('a = :\n'))
for count in range(n):
    Tn = Tn + a
    a = a * 10
    Sn.append(Tn)
    print Tn
Sn = reduce(lambda x,y : x + y,Sn)
print Sn
'''
【程序19】
题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程
   找出1000以内的所有完数。
1. 程序分析:请参照程序''
from sys import stdout
for j in range(2,1001):
    k = []
    n = -1
    s = j
    for i in range(1,j):
            if j % i == 0:
                n += 1
                s -= i
                k.append(i)
   
    if s == 0:
        print j
        for i in range(n):
            stdout.write(k)
            stdout.write(' ')
        print k[n]
            
'''
【程序20】
题目:一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在
   第10次落地时,共经过多少米?第10次反弹多高?
1.程序分析:见下面注释
2.程序源代码:
'''
Sn = 100.0
Hn = Sn / 2
for n in range(2,11):
    Sn += 2 * Hn
    Hn /= 2
print 'Total of road is %f' % Sn
print 'The tenth is %f meter' % Hn