Pythonの100の経典のアルゴリズムの問題(1)
###c言語の100の経典のアルゴリズムの問題に従って、自分でオリジナルで書いたのは、自分の練習問題でなければなりません【プログラム1】問題:1、2、3、4つの数字があって、何個の互いに異なっていて繰り返しの数字の3桁を構成することができますか?どれくらいですか.プログラム分析:百位、十位、個位に記入できる数字はすべて1、2、3、4です.すべての配列を構成した後、条件を満たさない配列を取り除きます.
実行結果:
【手順2】問題:企業が支給するボーナスは利益によって引き上げられる.利益(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を入力して、ボーナスの総数を支払うべきですか?プログラム分析:条件文の運用,if else
実行結果:
【プログラム3】題目:1つの整数、それは100をプラスした後に1つの完全な平方数で、更に168をプラスしてまた1つの完全な平方数で、この数はいくらですか?プログラム分析:ループ計算でいい、判断が成立すれば出力できる.まず正の整数かどうかを判断します.mathモジュールを導入して平方根を計算します.
実行結果:
**結果分析:**2つ目が見える場合、複数の結果が表示されます.なぜなら、数が負の数になるからです.ここでは,開方結果が正の整数であるか否かを判断し,結果とint()を上方向に整数関数を取って演算すればよい.
【プログラム4】タイトル:ある年ある月ある日を入力し、この日がこの年の何日目かを判断する.プログラム分析:3月5日を例にとると、まず前の2ヶ月を加算し、それから5日を加えて本年の数日目にしなければならない.特殊な場合、閏年で入力月が3より大きい場合は、1日多く加算することを考慮しなければならない.ソース:
実行結果:
分析:pythonのswitchの使い方についてhttp://blog.csdn.net/lw_zhaoritian/article/details/51537675
【プログラム5】題目:3つの整数x,y,zを入力し、この3つの数を小さいから大きいまで出力してください.プログラム分析:最小の数をxに置く方法を考えて、まずxとyを比較して、x>yならxとyの値を交換して、それからxとzで比較して、x>zならxとzの値を交換して、このようにxを最小にすることができます
標準解法:
python内蔵ソートアルゴリズム:(1)リストの組み込み関数list.sortソート(2)グローバル関数sorted
【プログラム6】タイトル:アルファベットCのパターンを*で出力します.プログラム分析:まず'*'号で紙にアルファベットCを書いてから、支店で出力することができます.略
【プログラム7】タイトル:特殊パターンを出力し、c環境で実行してみてください、Very Beautiful!解析:ASCII文字を対応する数値、すなわち「a」->65に変換し、ord関数を使用し、ord(「a」)とは逆にchr関数を使用し、数値を対応するASCII文字に変換し、chr(65)は略
【プログラム8】タイトル:出力9*9口诀.プログラム分析:支店と列を考慮し、計9行9列、i制御行、j制御列.
コード実装:
printの後に追加し、改行しないように効果を出力します.
【プログラム9】タイトル:チェス盤の出力を要求する.プログラム解析:i制御行,jで列を制御し,i+jの和の変化に基づいて黒四角格子を出力するか,白四角格子を出力するかを制御する.略
【プログラム10】タイトル:階段を印刷し、階段の上に2つの笑顔を印刷します.プログラム解析:i制御行,jで列を制御し,jはiの変化に基づいて出力黒格子の個数略を制御する
【プログラム11】タイトル:古典的な質問:ウサギのペアは、生まれてから3ヶ月目から毎月1対のウサギが生まれて、ウサギは3ヶ月目に成長してから毎月また1対のウサギが生まれて、もしウサギはすべて死なないならば、毎月のウサギの総数はいくらですか?プログラム解析:フィボナッチ数列すなわち1,1,2,3,5,8,13,21...3番目の数から次の数までの2つの数の和
実行結果:
【プログラム12】タイトル:101-200の間に何個の素数があるかを判断し、全ての素数を出力する.プログラム分析:素数を判断する方法:1つの数でそれぞれ2からsqrt(この数)を除去し、整除できれば、この数は素数ではなく、逆に素数であることを示す.
#coding:utf-8
# : 1、2、3、4 , ? ?
sum=0
for i in range(1,5,1):
for j in range(1,5,1):
for k in range(1,5,1):
if(i!=j&j!=k):
sum=sum+1;
print i,j,k #
print sum
実行結果:
1 2 1
1 2 3
1 2 4
1 3 1
1 3 2
1 3 4
1 4 1
1 4 2
1 4 3
2 1 2
2 1 3
2 1 4
2 3 1
2 3 2
2 3 4
2 4 1
2 4 2
2 4 3
3 1 2
3 1 3
3 1 4
3 2 1
3 2 3
3 2 4
3 4 1
3 4 2
3 4 3
4 1 2
4 1 3
4 1 4
4 2 1
4 2 3
4 2 4
4 3 1
4 3 2
4 3 4
36
【手順2】問題:企業が支給するボーナスは利益によって引き上げられる.利益(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を入力して、ボーナスの総数を支払うべきですか?プログラム分析:条件文の運用,if else
#coding:utf-8
# : 。 (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,
# ?
bonus1=100000*0.1
bonus2=bonus1+100000*0.75
bonus4=bonus2+200000*0.5
bonus6=bonus4+200000*0.3
bonus10=bonus6+400000*0.15
mon = input(" :
")
if mon<=100000:
bonus=mon*0.1
else:
if mon<=200000:
bonus=bonus1+(mon-100000)*0.075
else:
if mon <= 400000:
bonus = bonus2 + (mon - 200000) * 0.05
else:
if mon <= 600000:
bonus = bonus4 + (mon - 400000) * 0.03
else:
if mon <= 1000000:
bonus = bonus6 + (mon - 600000) * 0.015
else:
if mon > 1000000:
bonus = bonus10 + (mon - 1000000) * 0.01
print bonus
実行結果:
:
120000
11500.0
【プログラム3】題目:1つの整数、それは100をプラスした後に1つの完全な平方数で、更に168をプラスしてまた1つの完全な平方数で、この数はいくらですか?プログラム分析:ループ計算でいい、判断が成立すれば出力できる.まず正の整数かどうかを判断します.mathモジュールを導入して平方根を計算します.
#coding:utf-8
import math
# : , 100 , 168 , ?
# x,y
print ' '
for i in range(100000):
if(math.sqrt(i+100)-int(math.sqrt(i+100))==0):
x = int(math.sqrt(i + 100)) # x x
if (math.sqrt(i + 268) - int(math.sqrt(i + 268)) == 0):
y = int(math.sqrt(i + 268)) # x x
print x,y
print ' %d' %i
# x*x-y*y=168
print ' '
for i in range(10000):
for j in range(1000):
if(i*i-j*j==168):
print i,j
print ' %d' %(i*i-268)
#
print ' '
for i in range(100000):
if(math.sqrt(i+100)-int(math.sqrt(i+100))==0):
x = int(math.sqrt(i + 100)) # x x
if (math.sqrt(i + 268) - int(math.sqrt(i + 268)) == 0):
y = int(math.sqrt(i + 268)) # x x
if(x*x==i+100 and y*y==i+268):
print x, y
print ' %d' % i
実行結果:
11 17
21
19 23
261
41 43
1581
13 1
-99
17 11
21
23 19
261
43 41
1581
11 17
21
19 23
261
41 43
1581
**結果分析:**2つ目が見える場合、複数の結果が表示されます.なぜなら、数が負の数になるからです.ここでは,開方結果が正の整数であるか否かを判断し,結果とint()を上方向に整数関数を取って演算すればよい.
【プログラム4】タイトル:ある年ある月ある日を入力し、この日がこの年の何日目かを判断する.プログラム分析:3月5日を例にとると、まず前の2ヶ月を加算し、それから5日を加えて本年の数日目にしなければならない.特殊な場合、閏年で入力月が3より大きい場合は、1日多く加算することを考慮しなければならない.ソース:
#coding:utf-8
# : , ?
data=raw_input(' , 2016-05-12:')
#
s=data.split('-')# -
if(len(s)==3):
#
year = int(s[0])
mon = s[1]
day = s[2]
print mon
# python switch case
else:
print ' '
da={'1':0,'2':31,'3':59,'4':90,'5':120,'6':151,'7':181,'8':212,'9':243,'10':273,'11':304,'12':334}
def f(x):
return da.get(x)
sum=int(f(mon))+int(day)
if(year%400==0 or (year%4==0 and year%100!=0)):
if(int(mon)>=3):
sum=sum+1
print sum
実行結果:
, 2016-05-12:1600-3-11
3
71
分析:pythonのswitchの使い方についてhttp://blog.csdn.net/lw_zhaoritian/article/details/51537675
【プログラム5】題目:3つの整数x,y,zを入力し、この3つの数を小さいから大きいまで出力してください.プログラム分析:最小の数をxに置く方法を考えて、まずxとyを比較して、x>yならxとyの値を交換して、それからxとzで比較して、x>zならxとzの値を交換して、このようにxを最小にすることができます
標準解法:
x=input('x=:')
y=input('y=:')
z=input('z=:')
t=0
if(x>y):
t=x
x=y
y=t
if(x>z):
t = x
x = z
z = t
if(y>z):
t = y
y = z
z = t
print x,y,z
python内蔵ソートアルゴリズム:(1)リストの組み込み関数list.sortソート(2)グローバル関数sorted
list=[x,y,z]
list.sort()
sorted(list)
print list
【プログラム6】タイトル:アルファベットCのパターンを*で出力します.プログラム分析:まず'*'号で紙にアルファベットCを書いてから、支店で出力することができます.略
【プログラム7】タイトル:特殊パターンを出力し、c環境で実行してみてください、Very Beautiful!解析:ASCII文字を対応する数値、すなわち「a」->65に変換し、ord関数を使用し、ord(「a」)とは逆にchr関数を使用し、数値を対応するASCII文字に変換し、chr(65)は略
【プログラム8】タイトル:出力9*9口诀.プログラム分析:支店と列を考慮し、計9行9列、i制御行、j制御列.
コード実装:
#coding:utf-8
for i in range(1,10):
print '
'
for j in range(1,10):
if(i>=j):
print '%d*%d=%d' % (i, j, i * j),
printの後に追加し、改行しないように効果を出力します.
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
【プログラム9】タイトル:チェス盤の出力を要求する.プログラム解析:i制御行,jで列を制御し,i+jの和の変化に基づいて黒四角格子を出力するか,白四角格子を出力するかを制御する.略
【プログラム10】タイトル:階段を印刷し、階段の上に2つの笑顔を印刷します.プログラム解析:i制御行,jで列を制御し,jはiの変化に基づいて出力黒格子の個数略を制御する
【プログラム11】タイトル:古典的な質問:ウサギのペアは、生まれてから3ヶ月目から毎月1対のウサギが生まれて、ウサギは3ヶ月目に成長してから毎月また1対のウサギが生まれて、もしウサギはすべて死なないならば、毎月のウサギの総数はいくらですか?プログラム解析:フィボナッチ数列すなわち1,1,2,3,5,8,13,21...3番目の数から次の数までの2つの数の和
#coding:utf-8
m1=m2=1
for i in range(25):
#
m1=m1+m2
m2=m2+m1
print m2
実行結果:
3 8 21 55
144 377 987 2584
6765 17711 46368 121393
317811 832040 2178309 5702887
14930352 39088169 102334155 267914296
701408733 1836311903 4807526976 12586269025
【プログラム12】タイトル:101-200の間に何個の素数があるかを判断し、全ての素数を出力する.プログラム分析:素数を判断する方法:1つの数でそれぞれ2からsqrt(この数)を除去し、整除できれば、この数は素数ではなく、逆に素数であることを示す.