Программа на python 3, перебирающая все возможные последовательности определённой длины: def shortest_chains(n): def next_chains(chain): new_elems = set() for i in range(len(chain)): for j in range(i, len(chain)): new_elem = chain[i] + chain[j] if new_elem > chain[-1] and new_elem not in new_elems: new_elems.add(new_elem) yield chain + [new_elem]
current_stage = None next_stage = [[1]] answer = [] while len(answer) == 0: current_stage = next_stage next_stage = [] for chain in current_stage: next_stage.extend(next_chains(chain)) answer = [chain[1:] for chain in next_stage if chain[-1] == n] return answer
def print_solution(n): answer = shortest_chains(n) print("Для {} есть {} решений(-я, -е):".format(n, len(answer))) for i in range(len(answer)): print("{}. {}".format(i + 1, " ".join(map(str, answer[i] print()
Запустив, можно получить все 5 возможных решений для числа 7, по 4 решения для 15 и 23 и 87 решений для 63.
uses crt,graph; type mas=array[1..500] of Pointtype; var gd,gm,i,j,k,n:integer; a:mas; begin randomize; gd:=0; initgraph(gd,gm,''); for i:=1 to 500 do begin a[i].x:=random(getmaxX); a[i].y:=random(getmaxY); circle(a[i].x,a[i].y,2); end; k:=0;n:=0; repeat k:=k+1; delay(200); setcolor(0); for i:=1 to 500 do circle(a[i].x,a[i].y,2); for i:=1 to 500 do begin if a[i].y>getmaxY-n-10 then a[i].y:=1 else a[i].y:=a[i].y+3; if a[i].x<0 then a[i].x:=getmaxX else a[i].x:=a[i].x-1; end; setcolor(15); for i:=1 to 500 do circle(a[i].x,a[i].y,2); if k mod 20=0 then begin n:=n+1; line(0,getmaxY-n,getmaxX,getmaxY-n); end; until keypressed; readln end.
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota
Оформи подписку