Dies ist die C-Ausgabe des Acing Programming Contest 2020. Ich hatte es schwer und schaute mit dem fehlgeschlagenen Code zurück.
n=int(input())
def f_count(j):
count=0
for x in range(1,j):
for y in range(1,j):
for z in range(1,j):
if x**2+y**2+z**2+x*y+y*z+z*x==j:
count+=1
return count
for i in range(1,n+1):
print(f_count(i))
Dies ist eine Methode zum Definieren einer Funktion f_count (j), die f (n) findet, j 1 bis n zuweist und ausgibt.
Da die Zeit vorbei war, habe ich versucht, z zu löschen, aber es war immer noch im Laufe der Zeit.
** <Punkt 1> **
In der Antwort beträgt der Maximalwert von n 10 ** 4. Da x, y, z quadratisch sind, ist der Maximalwert von x, y, z kleiner als 100.
** <Punkt 2> **
Suchen Sie bei f (1) x, y, z von 1 bis 100. → Suchen Sie bei f (2) x, y, z von 1 bis 100. Es braucht Zeit.
N=int(input())
#f(N)Liste zu setzen
ans_list=[0]*N
for x in range(1,100):
for y in range(1,100):
for z in range(1,100):
s=x**2+y**2+z**2+x*y+y*z+z*x
if s<=N:
ans_list[s]+=1
for i in range(1,N+1):
print(ans_list[i])
Ersetzen Sie x, y, z durch 1 bis 100, berechnen Sie den Wert von x ** 2 + y ** 2 + z ** 2 + x * y + y * z + z * x und listen Sie das Ergebnis ans_list auf Ich habe es reingelegt.
Ich habe jedoch einen Fehler im Bereich gemacht. Da ans_list [0] = [], ans_list [1] = f (1), ans_list [N-1] = f (N-1), ist f (N) nicht mehr in der Liste enthalten.
N=int(input())
max_x=int(N**0.5)
ans_list=[0]*N
for x in range(1,max_x):
for y in range(1,max_x):
for z in range(1,max_x):
s=x**2+y**2+z**2+x*y+y*z+z*x
if s<=N:
ans_list[s-1]+=1
for i in range(N):
print(ans_list[i])
Ich setze ans_list [s-1] + = 1. .
n=int(input())
keys=[i for i in range(1,n+1)]
values=[0 for i in range(1,n+1)]
dic=dict(zip(keys,values))
for x in range(1,100):
for y in range(1,100):
for z in range(1,100):
num=x**2+y**2+z**2+x*y+y*z+z*x
if 1<=num<=n:
dic[num]+=1
for key in dic:
value=dic[key]
print(value)
Für die richtige Antwort 1 habe ich versucht, daraus ein Wörterbuch zu machen, da der Index der Liste und n von f (n) nicht klar voneinander abweichen.