In diesem Artikel stellte AOJ in ["Richtlinien zur Verbesserung von Wettkampfprofis und AtCoder, unterrichtet von Red Coder [Anfänger: Beginnen wir mit Wettkampfprofis]"] vor (https://qiita.com/e869120/items/f1c6f98364d1443148b3) Ich werde 40 Fragen von "Einführung in die Programmierung I" in Python erklären.
Ich selbst habe ohne Programmiererfahrung mit wettbewerbsfähiger Programmierung begonnen. Nach dem Lesen des Einführungsbuchs "Von den Grundlagen der Python-Sprache des Selbststudienprogrammierers zur Arbeitsweise", "Einführung in die Programmierung I" Wir haben an //judge.u-aizu.ac.jp/onlinejudge/finder.jsp?course=ITP1) gearbeitet. Es ist nur eine individuelle Geschichte, aber nachdem Sie 40 Fragen gelöst haben, können Sie beim ** AtCoder Beginner Contest (ABC) **, der bei Atcoder stattfindet, Tee-Performance servieren. Ich denke, dass ich die Grundkenntnisse für wettbewerbsfähige Programmierung erwerben werde.
ITP1_1_A
print("Hello World")
[Erklärung] print
gibt Hello World
aus.
ITP1_1_B
x=int(input())
print(x**3)
[Erläuterung] Da "input ()" als Zeichenfolge empfangen wird, wird es verarbeitet, nachdem es mit "int ()" in einen numerischen Wert konvertiert wurde.
ITP1_1_C
a,b=map(int,input().split())
print(a*b,2*(a+b))
[Erklärung] input (). Split ()
kann für 1-zeilige / mehrspaltige Eingaben verwendet werden. Da es jedoch als Zeichenfolge empfangen wird, wird es verarbeitet, nachdem es mit "map" und "int" zu einem numerischen Wert gemacht wurde. Informationen zur Eingabe finden Sie unter "Einführung in Python ab AtCoder".
ITP1_1_D
S=int(input())
print(S//3600,":",(S%3600)//60,":",S%60, sep="")
[Erklärung] Der Quotient aus Sekunden geteilt durch "3600" ist "h", der Quotient aus Sekunden geteilt durch "3600" geteilt durch "60" ist "m" und die Anzahl der Sekunden ist "60". Der Rest nach dem Teilen ist s
. Um h, m, s
und zu verbinden:
mit+
, h, m, s
muss eine Zeichenfolge sein. Selbst wenn die Zeichenfolge und der numerische Wert gemischt sind, kann sie problemlos ausgegeben werden, wenn es sich um "Drucken" handelt. Informationen zur Ausgabe finden Sie unter "Einführung in Python ab AtCoder".
ITP1_2_A Small, Large, or Equal
ITP1_2_A
a,b=map(int,input().split())
if a>b:
print("a > b")
elif a<b:
print("a < b")
else:
print("a == b")
[Erklärung] Schreiben Sie wie gesagt.
ITP1_2_B
a,b,c=map(int,input().split())
if a<b and b<c:
print("Yes")
else:
print("No")
[Erklärung] Es gibt kein Problem, auch wenn Sie "a <b <c" schreiben.
ITP1_2_C Sorting Three Numbers
ITP1_2_C
three_numbers=list(map(int,input().split()))
three_numbers.sort()
print(*three_numbers)
[Erklärung] list
erscheint zum ersten Mal. list
ist ein Objekt, das mehrere Elemente enthält. "[Einführung in Python] Listenverwendung und Methodenübersicht" ist hilfreich. Wenn Sie es sich leisten können, sollten Sie auch "Tupel und Diktat" lernen. Um eine Liste zu sortieren, können Sie "Listenname" .sort () "oder" sortiert ("Listenname") "verwenden. Weitere Informationen zu diesen Unterschieden finden Sie unter "Unterschiede zwischen Sortieren und Sortieren in Python zum Sortieren von Listen".
ITP1_2_D Circle in a Rectangle
ITP1_2_D
W,H,x,y,r = map(int,input().split())
Flag=True
if x+r>W or x-r<0:
Flag=False
if y+r>H or y-r<0:
Flag=False
if Flag:
print("Yes")
else:
print("No")
[Erläuterung] Stellen Sie sicher, dass die Kreise in horizontaler und vertikaler Richtung nicht über das Rechteck hinausragen. Erstellen Sie ein "Flag" und setzen Sie es auf "False", wenn die Bedingungen nicht mehr erfüllt sind. Wenn es bis zum Ende "True" ist, passt der Kreis in ein Rechteck, andernfalls ist er entweder vertikal oder horizontal. True`` False
heißt Bool-Typ. "[Einführung in Python] Lassen Sie uns die Verwendung und Verwendung von Boolean lernen!" wird hilfreich sein.
ITP1_3_A Print Many Hello World
ITP1_3_A
for i in range(1000):
print("Hello World")
[Erklärung] Dies ist das erste Mal, dass das wiederholte "für" erscheint. Hier ist "[Einführung in Python] Wie man wiederholte Sätze mit for-Anweisungen schreibt" hilfreich.
ITP1_3_B
case_number=0
while True:
x=int(input())
case_number+=1
if x==0:
break
print("Case {}: {}".format(case_number,x))
[Erklärung] Ausführen, bis die Eingabe mit "while" zu "0" wird. Informationen zu "while" finden Sie unter "Schleifenverarbeitung durch Python while-Anweisung (Endlosschleife usw.)". In der Wettbewerbsprogrammierung wird es häufig als "Fall i: Ergebnis" ausgegeben. In Python gibt es mehrere Ausgabemethoden, von denen eine das Format ist. format
ist eine String-Methode, mit der Sie Variablen in einen String einbetten können (nur in Python 2.6 und höher verfügbar). Hier ist "[Einführung in Python], wie der Inhalt von Variablen mit der Formatierungsmethode ausgegeben wird" hilfreich.
ITP1_3_C
while True:
x,y=map(int,input().split())
if x==0 and y==0:
break
if x>y:
print(y,x)
else:
print(x,y)
[Erklärung] Ausführen, bis die Eingabe mit "while" zu "0 0" wird. Überprüfen Sie danach die Größenbeziehung von "x, y" und Ausgabe.
ITP1_3_D
a,b,c=map(int,input().split())
cnt=0
for k in range(a,b+1):
if c%k==0:
cnt+=1
print(cnt)
[Erklärung] Überprüfen Sie nacheinander, ob die ganzen Zahlen von "a" bis "b" Brüche von "c" sind. Wenn es sich um einen Bruch handelt, erhöhen Sie "cnt" (Anzahl) um eins.
ITP1_4_A
a,b=map(int,input().split())
print(a//b,a%b,"{:.6f}".format(a/b))
ITP1_4_A (eine andere Lösung)
a,b=map(int,input().split())
print(a//b,a%b,round((a/b),6))
[Erklärung] Das Problem ist, wie der Bruchfehler von "a / b" behandelt wird. Sie können die Dezimalstelle einer Zahl mit format
angeben. "Beherrschen der format () -Methode von Python" ist hilfreich. Alternativ kann es gerundet werden, um Bruchfehler innerhalb der Grenzen des Problems zu halten. Bitte beachten Sie, dass "rund" nicht streng gerundet ist. Informationen zum Runden finden Sie unter "Round and Decimal.quantize round and decimal in Python".
ITP1_4_C
while True:
a,op,b=input().split()
a=int(a)
b=int(b)
if op=="?":
break
if op=="+":
print(a+b)
if op=="-":
print(a-b)
if op=="*":
print(a*b)
if op=="/":
print(a//b)
[Erläuterung] Ausführen, bis "?" Mit "while" angezeigt wird. Danach werden Addition, Subtraktion, Multiplikation bzw. Division ausgegeben.
ITP1_4_D
N=int(input())
a=list(map(int,input().split()))
print(min(a),max(a),sum(a))
[Erklärung] In Python
kann das Maximum, Minimum und die Summe von Liste
durchmax (Listenname) `` min (Listenname) `` Summe (Listenname)
berechnet werden.
ITP1_5_A
while True:
H,W= map(int,input().split())
if H==0 and W==0:
break
for i in range(H):
print("#"*W)
print()
[Erklärung] *
wird in der Zeichenfolge wiederholt. Zum Beispiel wird "Hallo Welt" * 3 zu "Hallo Welt Hallo Welt Hallo Welt". Das letzte "print ()" bedeutet eine Zeile zwischen Rechtecken.
ITP1_5_B
while True:
H,W= map(int,input().split())
if H==0 and W==0:
break
print("#"*W)
for i in range(H-2):
print("#"+"."*(W-2)+"#")
print("#"*W)
print()
[Erklärung] Ähnlich wie beim vorherigen Problem. Die 1. und H-Zeile sind jedoch "### ・ ・ # ###", aber die 2. bis H-1-Zeile sind "# ......... #". Daher "Ausgabe der ersten Zeile", "Ausgabe von der zweiten Zeile an die H-1-Leitung (dh die H-2-Leitung)" und "Ausgabe der H-Leitung".
ITP1_5_C
while True:
H,W=map(int,input().split())
if H==0 and W==0:
break
for h in range(H):
for w in range(W):
if (h+w)%2==0:
print("#",end="")
else:
print(".",end="")
print()
print()
[Erklärung] Sie können "für" in "für" schreiben. Es wird eine Doppelschleife genannt. (Referenz: "Pause von mehreren Schleifen (verschachtelt für Schleifen) in Python") Wenn Sie sich das Ausgabemuster, das Sie ausgeben möchten, genau ansehen, sehen Sie eine Linie. Beachten Sie, dass wenn die Summe aus Anzahl und Anzahl der Spalten gerade ist, es "#" ist, wenn es ungerade ist, es "." Ist (Beachten Sie, dass es in "Python" als 0. Zeile, 1. Zeile usw. gezählt wird). Gibt nacheinander jede Zeile aus und bricht in der letzten Spalte ab. Wenn Sie jedoch so etwas wie "print (" # ")" ausführen, tritt nach "#" ein Zeilenumbruch auf. Um dies zu vermeiden, verwenden Sie end =" "
, um Zeilenumbrüche bei der Ausgabe zu vermeiden.
ITP1_5_D Structured Programming
ITP1_5_D
N=int(input())
for i in range(1,N+1):
if i%3==0 or "3" in str(i):
print(" {}".format(i),end="")
print()
[Erklärung] Verstehen Sie zunächst die Bedeutung des Problems. Es ist schmerzhaft, wenn Sie den C ++ - Code nicht lesen können, aber da C ++ häufig zur Erklärung wettbewerbsfähiger Programmierung verwendet wird, kann es hilfreich sein, ihn lesbar zu machen. Beispielsweise ist der Code für ein Buch, das allgemein als ["Arihon"] bekannt ist (https://www.amazon.co.jp/dp/4839941068/), in C ++ geschrieben. In diesem Problem gibt ** "Unter den natürlichen Zahlen kleiner oder gleich n ein Vielfaches von 3 oder Zahlen mit 3 in aufsteigender Reihenfolge aus" **. Sie können leicht erkennen, dass es sich um ein Vielfaches von 3 handelt, indem Sie den Rest nach dem Teilen durch 3 betrachten. Dieses Mal habe ich "in" als Zeichenfolge verwendet, um zu bestätigen, dass 3 hinzugefügt wurde. Um festzustellen, ob eine beliebige Zeichenfolge enthalten ist, "Suchen Sie eine Zeichenfolge mit Python (bestimmen Sie, ob sie ~ enthält, Position abrufen, zählen)" Wird hilfreich sein.
ITP1_6_A
N=int(input())
a=list(map(int,input().split()))
a=a[::-1]
print(*a)
[Erläuterung] Um die Reihenfolge der Liste umzukehren, können Sie nach der Listentypmethode "reverse", der integrierten Funktion "reverse" und dem Slice sortieren. Diesmal habe ich Scheiben verwendet. Die umgekehrte Reihenfolge der Liste ist "Liste oder Zeichenfolge in Python umkehren", aber das Slice ist "Liste oder Zeichen für Python-Slice". "Teilweise Auswahl / Ersetzung von Spalten" ist hilfreich.
ITP1_6_B Finding Missing Cards
ITP1_6_B
N=int(input())
suits=["S","H","C","D"]
cards=[]
for _ in range(N):
s,n=input().split()
if s=="S":
cards.append(int(n))
elif s=="H":
cards.append(13+int(n))
elif s=="C":
cards.append(26+int(n))
else:
cards.append(39+int(n))
for i in range(1,53):
if i not in cards:
print(suits[(i-1)//13],(i-1)%13+1)
[Erklärung] Lassen Sie uns darüber nachdenken, wie Sie die Trump-Marke und die Zahl zusammen ausdrücken können. Markierungen und Zahlen können gleichzeitig dargestellt werden, indem Pik von 1 bis 13, Herzen von 14 bis 26, Klee von 27 bis 39 und Diamanten von 40 bis 52 dargestellt werden. Zum Beispiel wird 3 des Herzens 16. Machen Sie dann eine Liste der Karten, die Sie zuerst hatten. Überprüfen Sie danach, ob Sie die Zahlen von 1 bis 52 (dh alle 52 Spielkarten) nacheinander haben, und geben Sie sie aus, wenn Sie sie nicht haben.
[Memo] Tatsächlich ist es notwendig, vorsichtig zu sein, wenn Sie "in" für Probleme verwenden, bei denen der Rechenaufwand berücksichtigt werden muss. Informationen zur Berechnungsmenge finden Sie unter "Zusammenfassung zur Berechnung der Berechnungsmenge! ~ Woher das Protokoll stammt ~". Überprüfen, ob "i" in "Liste" ist Der Berechnungsbetrag in "i in Liste" beträgt $ O (n) $. Dies bedeutet, dass jedes Element in "Liste" überprüft wird, um festzustellen, ob "i" gleich ist. Es gibt kein Problem, wenn die Anzahl ungefähr der Anzahl der Spielkarten entspricht. Wenn die Anzahl jedoch groß ist, kann der Rechenaufwand enorm sein. Seien Sie also vorsichtig.
ITP1_6_C
N=int(input())
room=[[[0]*10 for _ in range(3)] for _ in range(4)]
for _ in range(N):
b,f,r,v=map(int,input().split())
room[b-1][f-1][r-1]+=v
for i in range(4):
for j in range(3):
for k in range(10):
print(" {}".format(room[i][j][k]), end="")
print()
if i!=3:
print("####################")
[Erklärung] Dieses Problem kann mit einem mehrdimensionalen Array gelöst werden. "Umgang mit mehrdimensionalen Arrays in Python [für Anfänger]" ist hilfreich. Das Anpassen des Ausgabeformats ist eine Herausforderung.
ITP1_6_D Matrix Vector Multiplication
ITP1_6_D
n,m=map(int,input().split())
A=[list(map(int,input().split())) for i in range(n)]
b=[int(input()) for i in range(m)]
for i in range(n):
ans=0
for j in range(m):
ans+=A[i][j]*b[j]
print(ans)
[Erklärung] Dieses Problem kann auch durch Verarbeitung mit einem mehrdimensionalen Array gelöst werden. Es wird eine Matrixberechnung sein.
ITP1_7_A
while True:
m,f,r=map(int,input().split())
if m==-1 and f==-1 and r==-1:
break
sum=m+f
if m==-1 or f==-1 :
print("F")
elif sum>=80:
print("A")
elif sum>=65:
print("B")
elif sum>=50:
print("C")
elif sum>=30:
if r>=50:
print("C")
else:
print("D")
else:
print("F")
[Erläuterung] Lesen Sie das Problem sorgfältig durch und führen Sie eine bedingte Verzweigung durch.
ITP1_7_C
while True:
n,x=map(int,input().split())
if n==0 and x==0 :
break
cnt=0
for i in range(1,n-1):
for j in range(i+1,n):
if j<x-i-j<=n:
cnt+=1
print(cnt)
[Erklärung] Dies ist ein Problem, das ein wenig mathematisches Denken erfordert. Erwägen Sie, drei Zahlen von den Zahlen bis zu "n" ohne Duplizierung hinzuzufügen, um "x" zu machen. Angenommen, Sie möchten 9 aus einer Zahl von 1 bis 5 machen. Zu diesem Zeitpunkt sind "1 + 3 + 5" und "3 + 5 + 1" dieselbe Zahlenkombination, daher werden sie als dieselbe Kombination angesehen. Um solche Kombinationen nicht mehrmals zu zählen, wählen wir unter der Regel aus, dass "die als nächstes zu wählende Zahl immer größer ist als die zuvor ausgewählte Zahl". Wählen Sie zuerst "i" und dann ein größeres "j". Wenn danach "x-i-j" größer als "j" und kleiner als "n" ist, wird es als Kombination festgelegt.
ITP1_7_C
r,c=map(int,input().split())
sheet=[list(map(int,input().split())) for i in range(r)]
for i in range(r):
sheet[i].append(sum(sheet[i]))
Column_sum=[0]*(c+1)
for j in range(c+1):
for i in range(r):
Column_sum[j]+=sheet[i][j]
for i in range(r):
print(*sheet[i])
print(*Column_sum)
[Erklärung] Erstellen Sie zunächst ein zweidimensionales Array von r * c
. Suchen und addieren Sie die Summe für jede Zeile und die Summe für jede Spalte. Es ist ein Problem, das durch die Kombination der herkömmlichen Ideen gelöst werden kann. Dieses Mal ist die Summe der Zeilen "Summe", und die Summe der Spalten wird berechnet, indem die Nummer der j-ten Spalte jeder Zeile um eins addiert wird.
ITP1_7_D Matrix Multiplication
ITP1_7_D
n,m,l=map(int,input().split())
A=[list(map(int,input().split())) for i in range(n)]
B=[list(map(int,input().split())) for i in range(m)]
C=[]
for i in range(n):
line=[]
for j in range(l):
c=0
for k in range(m):
c+=A[i][k]*B[k][j]
line.append(c)
C.append(line)
for line in C:
print(*line)
[Erklärung] Ein zweidimensionales Array wird verwendet. Sie müssen den Index verstehen und schreiben.
ITP1_8_A
words=input()
print(str.swapcase(words))
[Erläuterung] Es gibt verschiedene Methoden, mit denen zwischen Groß- und Unterbuchstaben konvertiert werden kann. Dieses Problem kann leicht gelöst werden, indem einer von ihnen, "Swapcase", verwendet wird. Es gibt andere Methoden, die Sie kennen sollten, wie "oben" und "unten". Vielleicht möchten Sie "Python-Alphabete konvertieren (obere / untere / Großbuchstaben / Swapcase / Titel)" lesen.
ITP1_8_B
while True:
str_n=input()
if str_n=="0":
break
list_n=list(str_n)
ans=0
for n in list_n:
ans+=int(n)
print(ans)
ITP1_8_B alternative Lösung
while True:
str_n=input()
if str_n=="0":
break
print(sum(list(map(int,str_n))))
[Erklärung] Dieses Mal wage ich es, den numerischen Wert als Zeichenfolge zu erhalten. Listen Sie die Zeichenfolgen auf. Wenn Sie beispielsweise für die Zeichenfolge "123" "list (" 123 ")" verwenden, ist dies "[" 1 "," 2 "," 3 "]". Verwenden Sie danach "for", um die Nummer jedes Ortes nacheinander zu extrahieren. Es kann jedoch als Zeichenfolge extrahiert werden. Konvertieren Sie es daher mit "int ()" in einen numerischen Wert und fügen Sie es dann hinzu. Sie können auch präziser mit "map" schreiben, das bisher als Standardeingabe verwendet wurde.
ITP1_8_C
import sys
texts=sys.stdin.read()
texts=texts.lower()
cnt=[0]*26
letters=list('abcdefghijklmnopqrstuvwxyz')
for x in texts:
i=0
for y in letters:
if x==y:
cnt[i]+=1
i+=1
for i in range(26):
print(letters[i]+" : "+str(cnt[i]))
[Erklärung] Bisher wurde die Standardeingabe mit "Eingabe" empfangen. Dieses Mal muss ich einen englischen Satz lesen, der mehrere Zeilen enthält, und ich kenne die Anzahl der Zeilen nicht. Es ist möglich, "while" und "input" zu kombinieren, aber das sys-Modul "sys.stdin.read" zu verwenden. Sie können eine mehrzeilige Zeichenfolge so wie sie ist empfangen. Für Details empfängt ["Python] Daten von der Tastatur mit Standardeingabe (sys.stdin.readlines, Eingabefunktion)"](https://algorithm.joho.info/programming/python-sys-stdin-readline/#toc3) Bitte beziehen Sie sich auf. Machen Sie nach der Eingabe alle unteren Buchstaben, überprüfen Sie das Alphabet nacheinander auf Englisch und zählen Sie.
ITP1_8_D
s=input()
p=input()
s*=2
if s.find(p)!=-1:
print("Yes")
else :
print("No")
[Erläuterung] Überlegen Sie, ob Sie aus einer ringförmigen Zeichenfolge eine bestimmte Zeichenfolge erstellen können. Ringförmige Saiten haben keinen Anfang und kein Ende, und Sie können so lange Saiten erstellen, wie Sie möchten. Bei diesem Problem ist die Bedingung jedoch, dass "p" kürzer als "s" ist. Daher reicht es aus, über zwei Runden des Rings nachzudenken. Erstellen Sie eine Zeichenfolge, die den beiden Runden des Rings entspricht, und prüfen Sie, ob Sie dort "p" machen können. Verwenden Sie die String-Methode find
, um zu sehen, ob es einp
gibt. find
ruft die Position einer bestimmten Zeichenfolge ab, gibt jedoch -1
zurück, wenn keine Zeichenfolge vorhanden ist. "Suchen Sie mit Python nach einer Zeichenfolge (bestimmen Sie, ob sie ~ enthält, ermitteln Sie die Position, zählen Sie)" ist hilfreich.
ITP1_9_A
import sys
word=input()
text=sys.stdin.read()
print(text.lower().split().count(word))
[Erklärung] Die Eingabe erfolgt mit sys.stdin.read
. Ich werde über "text.lower (). Split (). Count (word)" erklären. Verwenden Sie lower ()
, um es niedriger zu machen. Verwenden Sie split ()
, um eine durch Leerzeichen getrennte Liste zu erstellen. Es ist dasselbe wie "Teilen" von "Eingabe (). Teilen ()" mit normaler Standardeingabe. "Zeichenfolge mit Python teilen (Trennzeichen, Zeilenumbruch, regulärer Ausdruck, Anzahl der Zeichen)" ist hilfreich. Verwenden Sie die Methode "count", um herauszufinden, wie viele in der Liste enthalten sind. "[Python] Das Zählen der Anzahl der Vorkommen eines bestimmten Zeichens oder einer bestimmten Zeichenfolge (Anzahl)" ist hilfreich.
ITP1_9_B
while True:
cards=input()
if cards=="-":
break
m=int(input())
for i in range(m):
sh=int(input())
former=cards[:sh]
later=cards[sh:]
cards=later+former
print(cards)
[Erklärung] Es kann mit Slices in der Liste gelöst werden.
ITP1_9_C
n=int(input())
T=0
H=0
for i in range(n):
card_t,card_h=input().split()
if card_t==card_h:
T+=1
H+=1
else:
if card_h>card_t:
H+=3
else:
T+=3
print(T,H)
[Erläuterung] Wenn Sie in der Zeichenfolge >
oder <
verwenden, wird das Ergebnis des Vergleichs in lexikalischer Reihenfolge zurückgegeben. Sie können dies verwenden, um es zu lösen.
ITP1_9_D
text=input()
n=int(input())
for i in range(n):
order=input().split()
a,b=map(int,order[1:3])
if order[0]=="print":
print(text[a:b+1])
elif order[0]=="reverse":
re_text=text[a:b+1]
text=text[:a]+re_text[::-1]+text[b+1:]
else :
text=text[:a]+order[3]+text[b+1:]
[Erklärung] Wie zuvor können Sie es mit Slices der Liste lösen. Sie müssen jedoch ein wenig vorsichtig sein, wenn Sie "Rückwärts" verwenden. Wenn "step" in einem Slice in "-1" geändert wird, werden "start" und "end" nicht wörtlich interpretiert. Diese Frage ist hilfreich. Dieses Mal habe ich eine Liste des Bereichs erstellt, den ich umkehren möchte, und dann in umgekehrter Reihenfolge.
ITP1_10_A
x1,y1,x2,y2=map(float,input().split())
print(((x1-x2)**2+(y1-y2)**2)**0.5)
[Erklärung] Die Route kann berechnet werden, indem das Modul "math" importiert und "math.sqrt ()" oder "** 0.5" verwendet wird.
ITP1_10_B
import math
a,b,C=map(float,input().split())
θ=math.radians(C)
h=b*math.sin(θ)
S=(a*h)/2
c=math.sqrt(a**2+b**2-2*a*b*math.cos(θ))
L=a+b+c
print(S,L,h,sep="\n")
[Erklärung] Das Dreiecksverhältnis verwendet das Modul "math". Die Konvertierung zwischen Radian und Frequenzmethode ist "Gegenseitige Konvertierung zwischen Radian und Frequenzmethodeneinheit", und das trigonometrische Verhältnis ist ["Dreiecksfunktion mit Python berechnen (sin, cos , tan, arcsin, arccos, arctan) "(https://note.nkmk.me/python-math-sin-cos-tan/) wird hilfreich sein. Die Länge von c wird nach dem Kosinussatz berechnet.
ITP1_10_C
while True:
n=int(input())
if n==0:
break
score=list(map(int,input().split()))
mean=sum(score)/n
var_sum=0
for i in range(n):
var_sum+=(score[i]-mean)**2
print((var_sum/n)**0.5)
[Erläuterung] Statistiken können mit Modulen wie "Statistik" berechnet werden, diesmal jedoch wie in der Problemstellung beschrieben. Berechnen Sie zunächst den Durchschnittswert. Finden Sie den Durchschnitt des Quadrats der Differenz vom Durchschnittswert. Das ist Verteilung. Wenn Sie diese Route wählen, ist dies die Standardabweichung, nach der Sie diesmal suchen.
ITP1_10_D
def Distance(X,Y,p):
s=0
for x,y in zip(X,Y):
s+=abs(x-y)**p
print(s**(1/p))
n=int(input())
X=list(map(int,input().split()))
Y=list(map(int,input().split()))
for p in range(1,4):
Distance(X,Y,p)
print(max(abs(x-y) for x,y in zip(X,Y)))
[Erläuterung] Bisher haben wir vorhandene Bibliotheken verwendet, Sie können jedoch auch Ihre eigenen Funktionen definieren. Dieses Mal definieren wir eine Funktion, die den Abstand "Abstand" ausgibt. Informationen zur Funktionsdefinition finden Sie unter "Definieren und Aufrufen einer Funktion in Python (def, return)". Nur die Entfernung von Chebyshev wird separat berechnet. Die Funktion "zip" ist auch nützlich, wenn Sie Elemente aus mehreren Listen abrufen. "Verwendung von Python, Zip-Funktion: Mehrere Listenelemente gleichzeitig abrufen" ist hilfreich.
Beim Schreiben des Kommentars habe ich versucht, so viele Informationen wie möglich so präzise und berührbar wie möglich zu gestalten. Ich habe es gewagt, Probleme zu lösen, die durch die Verwendung mehrerer Listen mit einem mehrdimensionalen Array gelöst werden können. Ich habe jedoch versucht, ein oder zwei neue Dinge pro Frage beizubehalten, damit es nicht plötzlich schwierig wird. Ich bin noch ein Anfänger, aber ich denke, es ist ein Artikel, der mich glücklich macht, wenn ich gerade mit Python anfange. Nach "Einführung in die Programmierung I" "lehrt Sie Red Coder, Ihre Konkurrenz pro / AtCoder zu verbessern" Ich denke, Sie sollten das Problem der vollständigen Suche angehen, wie es in der Richtlinie [Anfänger: Starten wir den Wettbewerb pro] eingeführt wurde. Während ich an dem vollständigen Suchproblem arbeitete, übte ich auch das schnelle Lösen, damit ich die drei Fragen A, B und C des ABC-Wettbewerbs innerhalb von insgesamt 30 Minuten lösen konnte. Ich hoffe, es wird für alle hilfreich sein. Vielen Dank für das Lesen bis zum Ende.
Recommended Posts