AOJの プログラミング入門 トピック7にチャレンジしました。
トピック7 構造化プログラミングⅡ
繰り返し処理や配列の問題が4問です。
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
最後は、 の行列 と の行列 を入力し、それらの積である の行列 を出力するプログラムです。
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