每天下班回家有時間就寫個小例子,一個月下來的成果,分享給大家學習~ 第一題 1、2、3、4個數字,能組成多少個互不相同且無重覆數字的三位數?都是多少? 程式分析: 可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去掉不滿足條件的排列。 代碼: 第二題 企業發放的獎金根據利潤提成。利 ...
每天下班回家有時間就寫個小例子,一個月下來的成果,分享給大家學習~
第一題
1、2、3、4個數字,能組成多少個互不相同且無重覆數字的三位數?都是多少?
程式分析:
可填在百位、十位、個位的數字都是1、2、3、4。組成所有的排列後再去掉不滿足條件的排列。
代碼:
for i in range(1,5): for j in range(1,5): for k in range(1,5): if( i != k ) and (i != j) and (j != k): print (i,j,k)
第二題
企業發放的獎金根據利潤提成。利潤(I)低於或等於10萬元時,獎金可提10%;利潤高於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可可提成7.5%;20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時高於40萬元的部分,可提成3%;60萬到100萬之間時,高於60萬元的部分,可提成1.5%,高於100萬元時,超過100萬元的部分按1%提成,從鍵盤輸入當月利潤I,求應發放獎金總數?
程式分析:
請利用數軸來分界,定位。註意定義時需把獎金定義成長整型。
代碼:
#include "math.h" main() { long int i,x,y,z; for (i=1;i<100000;i++) { x=sqrt(i+100); /*x為加上100後開方後的結果*/ y=sqrt(i+268); /*y為再加上168後開方後的結果*/ if(x*x==i+100&&y*y==i+268)/*如果一個數的平方根的平方等於該數,這說明此數是完全平方數*/ printf("\n%ld\n",i); } } ''' ''' import math for i in range(10000): #轉化為整型值 x = int(math.sqrt(i + 100)) y = int(math.sqrt(i + 268)) if(x * x == i + 100) and (y * y == i + 268): print i
第三題
一個整數,它加上100後是一個完全平方數,再加上168又是一個完全平方數,請問該數是多少?
程式分析:
在10萬以內判斷,先將該數加上100後再開方,再將該數加上268後再開方,如果開方後的結果滿足如下條件,即是結果。請看具體分析:
代碼:
#include "math.h" main() { long int i,x,y,z; for (i=1;i<100000;i++) { x=sqrt(i+100); /*x為加上100後開方後的結果*/ y=sqrt(i+268); /*y為再加上168後開方後的結果*/ if(x*x==i+100&&y*y==i+268)/*如果一個數的平方根的平方等於該數,這說明此數是完全平方數*/ printf("\n%ld\n",i); } } ''' import math for i in range(10000): #轉化為整型值 x = int(math.sqrt(i + 100)) y = int(math.sqrt(i + 268)) if(x * x == i + 100) and (y * y == i + 268): print i
第四題
輸入某年某月某日,判斷這一天是這一年的第幾天?
程式分析:
以3月5日為例,應該先把前兩個月的加起來,然後再加上5天即本年的第幾天,特殊情況,閏年且輸入月份大於3時需考慮多加一天。
代碼:
year = int(raw_input('year:\n')) month = int(raw_input('month:\n')) day = int(raw_input('day:\n')) months = (0,31,59,90,120,151,181,212,243,273,304,334) if 0 <= month <= 12: sum = months[month - 1] else: print 'data error' sum += day leap = 0 if (year % 400 == 0) or ((year % 4 == 0) and (year % 100 != 0)): leap = 1 if (leap == 1) and (month > 2): sum += 1 print 'it is the %dth day.' % sum
第五題
輸入三個整數x,y,z,請把這三個數由小到大輸出。
程式分析:
我們想辦法把最小的數放到x上,先將x與y進行比較,如果x>y則將x與y的值進行交換,然後再用x與z進行比較,如果x>z則將x與z的值進行交換,這樣能使x最小。
代碼:
l = [] for i in range(3): x = int(raw_input('integer:\n')) l.append(x) l.sort() print l
第六題
用*號輸出字母C的圖案。
程式分析:
可先用'*'號在紙上寫出字母C,再分行輸出。
代碼:
1 print ('Hello Python world!\n') 2 3 print ('*' * 10) 4 5 for i in range(5): 6 7 print ('* *') 8 9 print ('*' * 10) 10 11 print ('*\n' * 6)
第七題
輸出特殊圖案,請在c環境中運行,看一看,Very Beautiful!
程式分析:
字元共有256個。不同字元,圖形不一樣。
代碼:
a = 176 b = 219 print (chr(b),chr(a),chr(a),chr(a),chr(b)) print (chr(a),chr(b),chr(a),chr(b),chr(a)) print (chr(a),chr(a),chr(b),chr(a),chr(a)) print (chr(a),chr(b),chr(a),chr(b),chr(a)) print (chr(b),chr(a),chr(a),chr(a),chr(b))
第八題
輸出9*9口訣
程式分析:
分行與列考慮,共9行9列,i控制行,j控制列。
代碼:
1 #include "stdio.h" 2 3 main() 4 5 { 6 7 int i,j,result; 8 9 printf("\n"); 10 11 for (i=1;i<10;i++) 12 13 { for(j=1;j<10;j++) 14 15 { 16 17 result=i*j; 18 19 printf("%d*%d=%-3d",i,j,result);/*-3d表示左對齊,占3位*/ 20 21 } 22 23 printf("\n");/*每一行後換行*/ 24 25 } 26 27 } 28 29 ''' 30 31 for i in range(1,10): 32 33 for j in range(1,10): 34 35 result = i * j 36 37 print '%d * %d = % -3d' % (i,j,result) 38 39 print ''
第九題
要求輸出國際象棋棋盤。
程式分析:
用i控制行,j來控制列,根據i+j的和的變化來控制輸出黑方格,還是白方格。
代碼:
#include "stdio.h" main() { int i,j; for(i=0;i<8;i++) { for(j=0;j<8;j++) if((i+j)%2==0) printf("%c%c",219,219); else printf(" "); printf("\n"); } } ''' import sys for i in range(8): for j in range(8): if(i + j) % 2 == 0: sys.stdout.write(chr(219)) sys.stdout.write(chr(219)) else: sys.stdout.write(' ') print ('')
第十題
列印樓梯,同時在樓梯上方列印兩個笑臉。
程式分析:
用i控制行,j來控制列,j根據i的變化來控制輸出黑方格的個數。
代碼:
import sys sys.stdout.write(chr(1)) sys.stdout.write(chr(1)) print '' for i in range(1,11): for j in range(1,i): sys.stdout.write(chr(219)) sys.stdout.write(chr(219)) print ''
第十一題
有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?
程式分析:
兔子的規律為數列1,1,2,3,5,8,13,21....
代碼:
1 main() 2 3 { 4 5 long f1,f2; 6 7 int i; 8 9 f1=f2=1; 10 11 for(i=1;i<=20;i++) 12 13 { printf("%12ld %12ld",f1,f2); 14 15 if(i%2==0) printf("\n");/*控制輸出,每行四個*/ 16 17 f1=f1+f2; /*前兩個月加起來賦值給第三個月*/ 18 19 f2=f1+f2; /*前兩個月加起來賦值給第三個月*/ 20 21 } 22 23 } 24 25 ''' 26 27 f1 = 1 28 29 f2 = 1 30 31 for i in range(1,21): 32 33 print '%12d %12d' % (f1,f2) 34 35 if (i % 2) == 0: 36 37 print '' 38 39 f1 = f1 + f2 40 41 f2 = f1 + f2
第十二題
判斷101-200之間有多少個素數,並輸出所有素數。
程式分析:
判斷素數的方法:用一個數分別去除2到sqrt(這個數),如果能被整除,則表明此數不是素數,反之是素數。
代碼:
main() { long f1,f2; int i; f1=f2=1; for(i=1;i<=20;i++) ¡¡{ printf("%12ld %12ld",f1,f2); ¡¡¡¡¡¡if(i%2==0) printf("\n");/*¿ØÖÆÊä³ö£¬Ã¿ÐÐËĸö*/ ¡¡¡¡¡¡f1=f1+f2; /*Ç°Á½¸öÔ¼ÓÆðÀ´¸³Öµ¸øµÚÈý¸öÔÂ*/ ¡¡¡¡¡¡f2=f1+f2; /*Ç°Á½¸öÔ¼ÓÆðÀ´¸³Öµ¸øµÚÈý¸öÔÂ*/ ¡¡} } ''' f1 = 1 f2 = 1 for i in range(1,21): print '%12d %12d' % (f1,f2) if (i % 2) == 0: print '' f1 = f1 + f2 f2 = f1 + f2
第十三題
列印出所有的“水仙花數”,所謂“水仙花數”是指一個三位數,其各位數字立方和等於該數 本身。例如:153是一個“水仙花數”,因為153=1的三次方+5的三次方+3的三次方。
程式分析:
利用for迴圈控制100-999個數,每個數分解出個位,十位,百位。
代碼:
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