题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月
后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... 2.程序源代码: main() {
long f1,f2; int i; f1=f2=1;
for(i=1;i<=20;i++)
{ printf(\
if(i%2==0) printf(\控制输出,每行四个*/ f1=f1+f2; /*前两个月加起来赋值给第三个月*/ f2=f1+f2; /*前两个月加起来赋值给第三个月*/ } } ''' f1 = 1 f2 = 1
for i in range(1,21):
print 'd d' % (f1,f2) if (i % 2) == 0: print '' f1 = f1 + f2 f2 = f1 + f2 '''
【程序12】
题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 2.程序源代码: ''' h = 0 leap = 1
from math import sqrt from sys import stdout for m in range(101,201): k = int(sqrt(m + 1)) for i in range(2,k + 1): if m % i == 0: leap = 0 break
if leap == 1:
print '%-4d' % m h += 1
if h % 10 == 0: print '' leap = 1
print 'The total is %d' % h '''
【程序13】
题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数
本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。 2.程序源代码: '''
for n in range(100,1001): i = n / 100 j = n / 10 % 10 k = n % 10
if i * 100 + j * 10 + k == i + j ** 2 + k ** 3: print \'''
【程序14】
题目:将一个正整数分解质因数。例如:输入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的值,重复执行第一步。
2.程序源代码: '''
from sys import stdout
n = int(raw_input(\print \
for i in range(2,n + 1): while n != i:
if n % i == 0:
stdout.write(str(i)) stdout.write(\
n = n / i else:
break print \'''
【程序15】
题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,
60分以下的用C表示。
1.程序分析:(a>b)?a:b这是条件运算符的基本例子。 2.程序源代码: 不支持这个运算符 '''
score = int(raw_input('input score:\\n')) if score >= 90: grade = 'A' elif score >= 60: grade = 'B' else:
grade = 'C'
print '%d belongs to %s' % (score,grade) '''
【程序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. 程序分析:请参照程序<--上页程序14. 2.程序源代码: '''
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[i]) 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 '''
【程序21】
题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下
的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
1.程序分析:采取逆向思维的方法,从后往前推断。 2.程序源代码: ''' x2 = 1
for day in range(9,0,-1): x1 = (x2 + 1) * 2 x2 = x1 print x1 '''
【程序22】
题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。已抽签决定
比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出
三队赛手的名单。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。 2.程序源代码: '''
for i in range(ord('x'),ord('z') + 1):