Aufgrund verschiedener Umstände werde ich versuchen, das von Atcoder veröffentlichte APG4b-Problem mit Python zu lösen. In Kapitel 1 habe ich versucht, das zu lösen, was Freiwillige veröffentlicht haben. Ab Kapitel 2 werde ich versuchen, das EX-Problem zu lösen, nachdem ich es selbst gelesen habe. Ich bin ein Anfänger, der Python nur etwa ein halbes Jahr lang an der Universität berührt hat. Ich würde mich freuen, wenn Sie mir beibringen könnten, ob es etwas gibt, das verkürzt (oder effizienter) werden kann. Ziel ist es, einen Code zu erstellen, der "Probleme effizient löst". Wenn aus zeitlichen Gründen AC im EX-Test angezeigt wird, lese ich die Modellantwort nur kurz und schreibe sie nicht neu.
** Wie schreibe ich eine Schleife ** Beispiel
a = int(input())
data = list(map(int,input().split()))
answer = 0
for i in range(len(data)):
if data[i] == a:
answer += 1
print(answer)
** Bereich für Aussage ** Beispiel
a = [1,3,2,5]
for i in a:
print(i)
In der Hauptfamilie gab es eine Aussage, dass "for-Anweisungen auch mit einem Containertyp verwendet werden können", aber ich habe mich gefragt, was ein Containertyp ist ...? Ich frage mich, ob der Typ, der jedes Element wie Liste und Diktat zusammen speichert, der Containertyp ist ...? Ist es so etwas wie das Aufrufen von int oder str eines Datentyps? In diesem Sinne werde ich es hier lassen.
** Detaillierte Geschichte ** Über die ordnungsgemäße Verwendung von Schleifen
--Wenn Sie alle Elemente des Arrays verarbeiten möchten → Bereich für Anweisung -Wenn eine bestimmte Anzahl von Malen wiederholt wiederholt wird, die nicht den Bedingungen von ↑ → für Anweisung entsprechen
Das erste, was ich dachte, war "Wann benutzt du den While-Satz ...?" Als ich es an der Universität verwendet habe, habe ich eine Wheel-Anweisung mit einer booleschen Variablen als Flag verwendet. Wird diese Methode tatsächlich verwendet? Ich wunderte mich und flatterte.
** Fälle, in denen die While-Anweisung geeignet ist **
n = int(input())
count = 0
while n > 0:
if n % 2 > 0:
break
n /= 2
count+=1
print(count)
Nützlich "nur solange bestimmte Elemente die Bedingungen erfüllen". Wenn ich darüber nachdachte, benutzte ich es an der Universität so (behandelt wie eine Flagge).
data = list(map(int,input().split()))
keep=0
flag=False
for i in data:
if keep==i:
flag=True
break
keep=i
if flag==True:
print("YES")
else:
print("NO")
** Mehrfachschleife ** Schleife innerhalb der Schleife. Ich habe gehört, dass dies kein sehr komplimentierter Weg ist, aber es tut mir leid, dass ich mich nicht an die Quelle erinnern kann. Ich hatte die Möglichkeit, den Code zu sehen, der zuvor von anderen Personen geschrieben wurde, aber wenn er mehrmals wiederholt wurde, dauerte es manchmal lange, bis ich "Was ist diese Absicht ...?" Hauptsächlich wegen meiner mangelnden Fähigkeiten! Hallo! !!
for i in range(3):
for j in range(3):
print("i:{},j:{}".format(i,j))
** Beispiel "Bestimmen Sie, ob zwei Arrays A und B von 3 Elementen dasselbe Element enthalten" **
A = list(map(int,input().split()))
B = list(map(int,input().split()))
answer = False
for i in range(3):
for j in range(3):
if A[i]==B[j]:
answer = True
if answer == True:
print("YES")
else:
print("NO")
Sicherlich konnten Sie doppelte Array-Elemente ohne mehrere Schleifen sehen. Aus lesbarer Sicht schrieb ich es mit Hirntod und dachte, es wäre leichter zu verstehen.
** Mehrfachschleifenunterbrechung / Fortsetzung **
Das ist alles dazu. In der Mehrfachschleife des Beispiels bedeutet dies "Wenn Sie bei" für j ~ "brechen / fortfahren, gehen Sie zu" für i ~ ". Es ist ein wenig schwer zu verstehen, aber es ist schwer zu verstehen. In Bezug auf diesen Teil gibt es ein leicht verständliches Beispiel in der Hauptfamilie.
** Indexfehler ** Wenn Sie diesbezüglich denken "Es ist wichtig, den Variablennamen zu bestimmen ...", denke ich, dass dies im Einklang mit der Absicht des Erstellers steht. "Ich" und "j" sind nicht leicht zu verstehen, nicht wahr? Ich benutze es jedoch immer, wenn ich mich nach Sätzen umdrehe. Übrigens, in meinem ersten Jahr habe ich das Gefühl, an der Universität gelernt zu haben, "Einzelbuchstabenvariablen zu stoppen". Darüber hinaus scheinen verschiedene Fragen eingereicht worden zu sein. Entschuldigen sie Herr Lehrer ...
N,S = map(int,input().split())
A = list(map(int,input().split()))
P = list(map(int,input().split()))
count = 0
total = 0
for ap_price in A:
for pin_price in P:
total = ap_price + pin_price
if total == S:
count+=1
else:
total = 0
print(count)
** Ein zweidimensionales Array ** Es tut mir leid, ich kenne C ++ überhaupt nicht. Als ich das ursprüngliche Haus las, konnte ich nur denken: "Warum sollte ich so viel Code schreiben, indem ich nur ein Array erstelle?" Als ich vor langer Zeit die Sprache C (nicht ++) berührte, kam das Wort "Speicher zuweisen" heraus, und ich denke, dass ich verschiedene Schritte unternehme, um die Kapazität des Arrays zu sichern. Nein, ich verstehe nicht wirklich. Gehen Sie zurück zu Python.
Beispiel
data = []
for i in range(3):
data.append(list(map(int,input().split())))
count = 0
for i in range(3):
for j in range(4):
if data[i][j] == 0:
count+=1
print(count)
** Erklärung ** Im obigen Beispiel ist dies der Teil.
data = []
for i in range(3):
data.append(list(map(int,input().split())))
Hängen Sie einfach die in Liste konvertierte Standardeingabezeile an die zuvor deklarierten Variablendaten des Listentyps an. Ist es in Ordnung, dies zu erklären?
Zugriff In Bezug auf die Daten des oben erstellten zweidimensionalen Arrays
data[Welche Nummer von oben][Nummer von links]
** Lerngröße ** Da das in der Kopffamilie gezeigte "Lernen der Größe" (vertikale Länge, horizontale Länge) war, Ich werde schreiben, wie man numpy importiert und überprüft. Wenn es leicht zu verstehen ist, können Sie es nur verstehen ...
import numpy as np
#Erstellen Sie ein zweidimensionales Array
data = []
for i in range(3):
data.append(list(map(int,input().split())))
#Machen Sie es zu einem NumPy-Array.gestalten
data = np.array(data)
print(data.shape)
** Konzept des 2D-Arrays ** Die Oberfamilie ist sehr leicht zu verstehen. Es heißt jedoch auch, dass es in Python nicht notwendig ist ... Ich habe keine Lust dazu, aber es ist ein Wissen, das in der ersten Hälfte des zweiten Jahres einer bestimmten Universität verwendet werden muss, also ist es besser, es zu lesen. Eines Tages hörte ich von meinen Senioren: "Wenn Sie verschiedene Sprachen berühren, können Sie die Sprache verstehen, die Sie zum ersten Mal in der Atmosphäre berühren." Ist das für Python nicht notwendig? Es ist wichtig, dass Sie richtig lesen, was Sie als Wissen betrachten und eines Tages von einem nützlichen Tag träumen. Es ist wichtig! !! !! !! !! !! !!
** Mehrdimensionales Array **
Beispiel Es tut mir leid, dass ich nicht umschreiben konnte ... </ font> Die Eingabe dieses Problems erfolgt in mehreren 3 × 3-Format-Problemen, aber die leere Zeile zwischen den Problemen ist unweigerlich in dem mehrdimensionalen Array enthalten, und die letzte Zeile kann nicht gelesen werden. Es ist voll ... Aus Gewohnheit stolpere ich an solchen Orten und verbringe unendlich viel Zeit. Wenn ich also ruhig bin, fange ich von vorne an. Ich meine, für wen entschuldigen Sie sich?
seitdem Ich habe das oben genannte Problem nicht gelöst, daher werde ich es später tun.
n,m = map(int,input().split())
lists = []
for i in range(m):
lists.append(list(map(int,input().split())))
result = []
results = []
for i in range(n):
for j in range(n):
result.append("-")
results.append(result)
result = []
for i in lists:
win = i[0]
lose = i[1]
results[win-1][lose-1] = "o"
results[lose-1][win-1] = "x"
for i in results:
j=" ".join(i)
print(j)
Das ist absolut schlechtes Schreiben. Wie auch immer, ich habe es improvisiert geschrieben, um die Klimaanlage abzureißen. Wir werden es zu einem späteren Zeitpunkt zusammen mit den obigen Übungen beheben.
Referenz
Verweisen Sie auf eine andere Variable aus einer Variablen. Kann das mit Python gemacht werden? Nach einer kurzen Suche fand ich die Konzepte "unveränderlich" und "veränderlich". "Unveränderlich" bezieht sich auf Zeichenfolgen, Zahlen usw., und Objekte, die zu diesem Konzept gehören, können die Zahlen einer Variablen nicht wie die ursprüngliche Familie in eine andere ändern. Im Gegenteil, Objekte wie Wörterbücher und Listen, die zu "veränderlich" gehören, können wie die Kopffamilie von einer Variablen in eine andere umgeschrieben werden. Ja wirklich.
a = 3
b = a
#Die Nummer 3 von a wird ausgegeben
print(b)
b = 4
#Bei der Kopffamilie wird der numerische Wert von a ersetzt und 4 ausgegeben.
#Da das numerische Objekt jedoch unveränderlich ist, wird 3 ersatzlos ausgegeben.
print(a)
a_list=[1,2,3]
b = a_list
b[0] = 4
#Wenn es die Hauptstraße wird, a_Das 0. Element der Liste wurde neu geschrieben[4,2,3]werden
#Das Listenobjekt ist veränderbar. Ersetzen Sie es daher[4,2,3]Wird ausgegeben
print(a_list)
Gab es einen solchen Mechanismus? Ich wusste es nicht…… Ich habe mich gefragt, ob alle Objekte in C ++ veränderbar sind, aber als ich vor langer Zeit C (nicht ++) berührt habe, verwaltet die Sprache C Variablen im Speicher. Ich habe das Gefühl, die Geschichte gehört zu haben. Nein, ich habe damals zur gleichen Zeit Haskell studiert ... Es tut mir leid, dass ich mich keinen Moment erinnern kann und mein Gedächtnis trübe ist, also gehe ich zurück zu Python.
** Danach ** Es ist einfacher zu verstehen, wenn Sie das Original lesen (und es scheint sich von Python zu unterscheiden). Aber ist der Mechanismus hier der gleiche wie bei Python und C ++? Python ist eine Interpretersprache und C ++ ist eine Kompilierungssprache, nicht wahr? Ich weiß nur, ob ich zur Laufzeit kompilieren soll oder nicht, aber der Unterschied zwischen den beiden besteht darin, dass das grundlegende Verhalten das gleiche ist, nur die Ausführungsmethode ist unterschiedlich ...? Ich werde später selbst weiter nachforschen. Ich weiß es nicht.
A = []
for i in range(9):
line = list(map(int,input().split()))
A.append(line)
correct_count = 0
wrong_count = 0
def saiten(A,correct_count,wrong_count):
for i in range(9):
for j in range(9):
if A[i][j] == (i+1)*(j+1):
correct_count+=1
else:
wrong_count+=1
A[i][j]=(i+1)*(j+1)
return A,correct_count,wrong_count
A,correct_count,wrong_count = saiten(A,correct_count,wrong_count)
for i in range(9):
line =[str(a) for a in A[i]]
line=' '.join(line)
print(line)
print(correct_count)
print(wrong_count)
Da "korrekt_count" und "false_count", die die Anzahl der richtigen und falschen Antworten angeben, unveränderliche Objekte sind, können sie nicht in der Funktion "saiten ()" ersetzt werden, die die Bewertung durchführt. Also gebe ich das Ergebnis mit return zurück. Da "A" in dem zweidimensionalen Array, in dem das Berechnungsergebnis gespeichert ist, ein veränderbares Objekt ist, kann es in der Funktion ersetzt werden. Also habe ich es nicht zurückgegeben.
Ich habe Wörter verwendet, die unveränderlich, veränderlich und andere Fachbegriffe zu sein scheinen, aber wenn all dies falsch ist, wäre es ziemlich lächerlich. Es scheint, dass Sie verpönt werden, wenn Sie die Bedeutung von "Waroshi" in alten Texten als "sehr interessant" missverstehen und sie häufig vor einem Japanischlehrer verwenden. Mach es einmal in deinem Leben.
Ich habe das in meinem ersten Jahr gelernt, aber ich erinnere mich nicht daran, seitdem eine Wiederholung verwendet zu haben. Es scheint, dass dies eine schwierige Kategorie in der Oberfamilie ist, und es wurde geschrieben: "Wenn Sie nach dem Lesen der Erklärung nicht verstehen, können Sie sie überspringen." e? Verwenden Sie diese nicht oft?
Ich erinnere mich nur ein wenig daran, also schreibe ich den Code für die Übung und erinnere mich daran.
def sum(n):
if n == 0:
return 0
s = sum(n - 1)
return s + n
print(sum(2)) # 0 + 1 + 2 = 3
print(sum(3)) # 0 + 1 + 2 + 3 = 6
print(sum(10)) # 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 55
Ich weiß nicht, wie ich es in Worte fassen soll.
"sum (n)" soll "return 0" zurückgeben, dh 0, wenn "wenn n == 0". Die rekursive Operation wird mit der folgenden "s = Summe (n -1)" ausgeführt. Die durch Subtrahieren von 1 von n erhaltene Zahl wird in den rekursiven Aufruf verschoben, und wenn n 0 wird, wird der rekursive Aufruf beendet und die Berechnung durchgeführt ...?
Ich verstehe das Gefühl dieser Funktion, aber es ist schwierig, sie zu schreiben. Lassen Sie uns eine Kugel machen.
** Für sum (2)
**
[1. Schleife] ** n = 2 **, daher ist die if-Anweisung ein Pfad. "s = sum (n -1)" wird zu "s = sum (1)". Rekursion hier.
⬇︎
[2. Schleife] ** n = 1 **, wenn also Minuten vergehen. "s = sum (n -1)" wird zu "s = sum (0)". Rekursion hier.
⬇︎
[Dritte Schleife] Gehen Sie zu if-Anweisung mit ** n = 0 **. 0 kehrt bei Rückkehr zurück.
⬇︎
[2. Schleife] s = sum (n -1)
ist der in der 3. Schleife zurückgegebene Wert ** s = 0 **. Da ** n = 1 ** ist, wird "return s + n" ausgeführt und 1 wird zurückgegeben.
⬇︎
[1. Schleife] s = sum (n -1)
ist der in der 2. Schleife zurückgegebene Wert ** s = 1 **. Da ** n = 2 **, geben Sie return s + n
und 3 zurück. das Ende.
Das ist es. Das ist mein Gefühl. Nein, das ist zum ersten Mal schwer zu sehen. Es scheint Spaß zu machen, solche Probleme zu lösen, aber ist es in Ordnung, es zu lesen, wenn es in tatsächlichen Schlachten verwendet wird? Auf meiner Ebene ist es schwierig, wenn ich es nicht aufführe, aber wenn Sie eine erfahrene Person sind, können Sie es auf einen Blick erkennen? Ich muss mich widmen ...
** Danach ** Lesen wir die Hauptfamilie. Okay (nicht). Ich war ein bisschen schwierig. Inhaltlich habe ich jedoch in der ersten Hälfte des zweiten Jahres ein wenig in der Algorithmusklasse gearbeitet. Um ehrlich zu sein, ist es vielleicht besser, den Inhalt der Hauptfamilie als Lehrbuch zu lesen, als als tatsächlichen Kampf. Es ist vielleicht besser, in einer Atmosphäre wie "Es gibt so etwas" zu lesen. Aber wenn ich es tun würde, würde ich nur Aussagen und Flaggen aufstellen ... Ich kann überhaupt nicht daran denken.
n = int(input())
read_line = list(map(int,input().split()))
p = []
for i in range(n):
if i == 0:
p.append(-1)
continue
p.append(read_line[i-1])
key = list(dict.fromkeys(p))
children={}
for i in key:
value_list = []
for j in range(n):
if i == p[j]:
value_list.append(j)
children[i]=[]
for k in value_list:
children[i].append(k)
def count_report_num(chlidren,x):
if children.get(x)==None:
return 1
sum = 0
for i in children[x]:
sum += count_report_num(chlidren,i)
sum+=1
return sum
for i in range(n):
print(count_report_num(children,i))
Ich konnte das Verhalten der Wiederholung nicht verstehen, also bezog ich mich auf die Modellantwort ... Es scheint auch, dass Sie dem Array mit c ++ untergeordnete Elemente hinzufügen können, aber ich wusste nicht, wie es in Python gemacht werden soll, also habe ich beschlossen, es mit dem Typ dict auszuführen. Es war schwer.
Lesen Sie die Erklärung der Oberfamilie sorgfältig durch. Es war sehr leicht zu verstehen. Dies ist auch der Inhalt, der in der ersten Hälfte des zweiten Jahres einer bestimmten Universität erstellt werden muss, daher dachte ich, dass dies nützlich wäre.
Ich habe eine Antwort darauf und muss sie nicht umschreiben (nur auskommentieren), also frage ich mich, ob ich sie nicht schreiben muss.
Recommended Posts