AIZU ONLINE JUDGE: Programming Challenge プログラミング入門 トピック7

AOJの プログラミング入門 トピック7にチャレンジしました。

onlinejudge.u-aizu.ac.jp

 

トピック7 構造化プログラミングⅡ

繰り返し処理や配列の問題が4問です。

トピック7

7_A:Granding

成績をつけるプログラミングです。

中間試験の点数 m、期末試験の点数 f、再試験の点数 rで入力され、合計値に応じて成績をつければクリアできます。

while Ttue: で無限ループにし、-1,-1,-1が入力されたらbreak、それ以外は条件分岐してリストに代入し、入力がすべて完了したら出力する形で記述しました。

list_a =
while True:
    m,f,r = map(int,input().split())
    if m == -1 and f == -1 and r == -1 :
        break
    else:
        if m+f >= 80:
            list_a.append("A")
        elif m+f >=65:
            list_a.append("B")
        elif m+f >=50:
            list_a.append("C")
        elif m+f >=30:
            if m == -1 or f == -1 :
                list_a.append("F")
            elif r >=50:
                list_a.append("C")
            else:
                list_a.append("D")
        else:
            list_a.append("F")

for iii in range(len(list_a)):
    print(list_a[iii])

 

7_B:How many ways?

n,xが与えられ、1からnまでの数字を使ってxを作成する問題です。

無限ループ、リストに追加、終了後にfor文で

計算してカウント値を出力。 という感じで解けました。

他の方の回答を見ると、While文の中でprintも実行していました。

たしかにこちらのほうが短いプログラムになります。

 

list_a =
while True:
    n,x = map(int,input().split())
    if n == 0 and x == 0 :
        break
    else :
        list_a.append([n,x])

count=0
for iii in range(len(list_a)):
    for jjj in range(1,list_a[iii][0]+1):
        for kkk in range(2,list_a[iii][0]+1):
            for lll in range(3,list_a[iii][0]+1):
                if jjj + kkk + lll == list_a[iii][1]:
                    if jjj < kkk < lll:
                        #print("AA",jjj,kkk,lll,"SUN= ",jjj+kkk+lll,count)
                        count+=1
                    
    print(count)
    count=0 

 

7_C:Spreadsheet

7_Cは行列式を読み込んで+1行、+1列を追加する問題です。

最初に行と列の数をr,cの変数に取り込みました。

その後、rになるまで入力データをlist_aというリストに取り込みました。

最後1行多くなるので1行分list_r1を作成し、データを代入してみました。

for lll in range(len(list_r1)): 

で実行すると、PRESENTATION ERRORと表示されたので、

for lll in range(len(list_r1)-1):

に変更して、最後はend=” "とスペースが入らないように変更するとパスできました。

 

r,c = map(int,input().split())

iii = 0
list_a=
while iii < r :
    in_data = list(map(int,input().split()))
    list_a.append(in_data)
    iii+=1

list_r1=[0]*(c+1)
c1=0

for jjj in range(len(list_a)):
    for kkk in range(c):
        print(list_a[jjj][kkk],end=" ")
        c1 = c1 + list_a[jjj][kkk]
        list_r1[kkk] = list_a[jjj][kkk] + list_r1[kkk]
        
    print(c1)
    list_r1[-1] = list_r1[-1]+c1
    c1 = 0

for lll in range(len(list_r1)-1):
    print(list_r1[lll],end=" ")
print(list_r1[-1])

 

7_D:Matrix Multiplication

最後は、n×m の行列 A と m×l の行列 B を入力し、それらの積である n×l の行列 C を出力するプログラムです。

nxmの行列とmxlの行列用のリストを作成し、最後にfor文で計算しました。

 

n,m,l= map(int,input().split())

iii=0
list_nxm =  
list_mxl = []
while iii < n:
    in_data = list(map(int,input().split()))
    list_nxm.append(in_data)
    iii+=1

iii=0
while iii < m :
    in_data = list(map(int,input().split()))
    list_mxl.append(in_data)
    iii+=1

ccc = 0

for k1 in range(n):  
    for k2 in range(l): 
        for k3 in range(m):
            aaa = list_nxm[k1][k3]
            bbb = list_mxl[k3][k2]
            ccc = ccc+aaa*bbb
        #print("ccc=",ccc)
        if k2 != l -1:
            print(ccc,end=" ")
        else:
            print(ccc)
        ccc=0
            

      

completed

 

 

 

 

 

 

 

 

 

 

/* -----codeの行番号----- */