python学習:プログラム制御構造・ジョブ20141219

4107 ワード

Python学習:プログラム制御構造20141219
プログラミング環境:
     windows 7 x64
     python 2.7.6
タイトル:
1プログラムを作成し、以下の問題を完成する(1点)
タイトル内容:
10以内の自然数の3または5の倍数をリストすると、3,5,6,9が含まれます.では、これらの数字の和は23です.任意の正の整数n以内の3または5の倍数の自然数の和を算出することが要求される.
入力形式:
正の整数n.
出力フォーマット:
n以内の3または5の倍数の自然数の和.
サンプルを入力:
10
出力サンプル:
23
時間制限:500 msメモリ制限:32000 kb
n = int(raw_input())
sum = 0
for i in range(0, n):
    if i % 3 == 0 or i % 5 == 0:
        sum += i
else:
    print sum

2.プログラムを作成し、以下の問題(1点)を完成する
タイトル内容:
10以内の素数2,3,5,7の和は17である.任意の正の整数n以内のすべての素数の和を算出することが要求される.
入力形式:
正の整数n.
出力フォーマット:
n以内のすべての素数の和.
サンプルを入力:
10
出力サンプル:
17
時間制限:500 msメモリ制限:32000 kb
import math
n = int(raw_input())
sum = 0

for tmp in xrange(2, n):
    for i in xrange(2, int(math.sqrt(tmp)+ 1) ):
        if tmp % i == 0 :
            break
    else:
        sum += tmp
print sum

3プログラムを作成し、以下の問題(1点)を完成する.
タイトル内容:
以下の情報から計算すると、1901年1月1日から2000年12月31日までの間に毎月の初日に何日の日曜日が落ちたのですか?
a)1900.1.1は月曜日です
b)1月、3月、5月、7月、8月、10月と12月は31日
c)4月、6月、9月と11月は30日です
d)2月は28日、閏年は29日
e)西暦年数が4で除かれ、100で除かれないのが閏年
f)直接400で割り切れるのも閏年
出力フォーマット:
正の整数
時間制限:500 msメモリ制限:32000 kb
1).自分で模索した:
days = 0
weekday = 1
year = 1900
count = 0
num = 0
if  year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
    days = 366
else:
    days = 365
weekday += days % 7

for year in range(1901,2001):

    for month in  range(1,13):
        if month in [1,3,5,7,8,10,12]:
            days = 31
            weekday += days
            if weekday % 7 == 0:
                count += 1
        elif month in [4,6,9,11]:
            days = 30
            weekday += days
            if weekday % 7 == 0:
                count += 1
        elif  year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
                days = 29
                weekday += days
                if weekday % 7 == 0:
                    count += 1
        else:
                days = 28
                weekday += days
                if weekday % 7 == 0:
                    count += 1
print count

2.)宿題を終えた後、ネットユーザーの比較的高級な答えを見た.
count=0
year=1901
month=[31,28,31,30,31,30,31,31,30,31,30,31]
day= 1 + 365 %7
while year < 2001:
    if (year%4==0 and year%100!=0) or year%400==0:
        month[1]=29
    else:
        month[1]=28
    for mon in range(12): 
        day += month[mon]
        day = day%7
        # print(day,mon)
        if day == 0:
            count += 1
    year += 1
print(count)

4.プログラムを作成し、以下の問題(2点)を完成する
タイトル内容:
数字197は、197の3桁の循環シフト後の数字:197971719がすべて素数であるため、循環素数と呼ぶことができる.100以内の数字は13個,2,3,5,7,11,13,17,31,37,71,73,79,97を含む.任意の正の整数n以内に合計何個のこのような循環素数が要求される.
入力形式:
正の整数n.
出力フォーマット:
n以内のサイクル素数の数.
サンプルを入力:
100
出力サンプル:
13
時間制限:2000 msメモリ制限:32000 kb
import math
count = 0
n = int(raw_input())
shuzi = 0
if n >= 2:
    for shuzi in range(2,n+1):
        #shuzi = 197
        for yinzi in range(2,int(math.sqrt(shuzi) + 1)):
            if shuzi % yinzi == 0:
                #print 'break:',shuzi,yinzi
                break
        else:
            sushu = shuzi
            #print sushu
            sushu_tmp = sushu
            weishu = 0
            while sushu_tmp != 0:
                weishu += 1
                sushu_tmp /= 10
                
            #print 'weishu:',weishu
            if weishu == 1:
                count += 1
            elif weishu >= 2:
                #print sushu
                i = 1
                while i < weishu:
                    shuzi_xunhuan = int(sushu/(10**i)+(sushu %(10**i) )* (10 ** (weishu - i)))
                    i += 1
                    for yinzi2 in range(2,int(math.sqrt(shuzi_xunhuan) + 1)):
                        if shuzi_xunhuan % yinzi2 == 0 :
                            i = weishu + 1
                            break
                if i == weishu:
                    count +=1

    print count