Помогите с программкой, чтобы считала за меня

Добрый день!Да числа только натуральные!Язык не обязательно С++,мне как простому юзеру нужно просто открыть прогу,ввести имеющиеся числа и получить результат.
Диапазон от 1 до 99.Да может быть что и нельзя будет подобрать.Это тоже результат.
А если подходит несколько пар,то конечно нужны все результаты.
P.S. Хочу попробовать какой результат будет при вычислении очков в баскетболе,амер футболе.В ручную очень мучительно 100 и больше игр так разложить.

Закономерность)))

Что-то звучит как гадание на кофейной гуще :thinking:

В ручную на бумажке получается)

В Экселе и аналогах можно сделать с помощью сортировки как-то так:

https://docs.google.com/spreadsheets/d/1YyipOXWfrzQmB1atmA5gDuOGMqcm3Ud2JYz1dkAygic/edit?usp=sharing

Но тут только два числа вручную введенные, не перебор.

Мне тут в других источниках почти сделали))и там 5 нужных вариантов получилось
при имеющихся числах
12 21
18 81
9 90
Получили не хватающие
78 87
23 32
67 76
45 54
21 12
1112

Столько много движений не нужных(((
Спасибо рассмотрю такой вариант.

Что-то не понял как в этой стене чисел результат найти :thinking:

А, понял, тут подходящих под условие из первого сообщения пар намного больше получается, чем 5.
Видимо не хватает симметричности )

Вот сделал на Питоне. Таких тоже не 5.

import itertools

left_input = [12, 18, 9]
right_input = [21, 81, 90]

for pair in itertools.permutations(range(1, 100), 2):
    left = sorted(left_input + [pair[0]], reverse=True)
    right = sorted(right_input + [pair[1]])

    results = [a + b for a, b in zip(left, right)]
    if abs(results[0] - results[1]) == abs(results[2] - results[3]) and str(pair[0]).zfill(2) == str(pair[1]).zfill(2)[::-1]:
        print(pair, results)

Можно запустить в любом онлайн интерпретаторе:
https://repl.it/@AlexP11223/WeirdScoreFinder

2 лайка

Спасибо!Попробую.

А мне то что нужно там нажимать?
Все что слева перенести в право?и дальше что то нажать?

В первых строках кода данные поменять можно, потом Run нажать.

А почему программка 3 30 пропустила?

Потому что я не знал какая именно симметричность нужна, 3 был просто 3, а не 03 )
Исправил.

1 лайк

[https://repl.it/@AlexP11223/WeirdScoreFinder ]
а тут исправлено?)

Да.

А это можно как то скачать?Если у меня инета не будет то все?((

Код скопировать )

Можно себе на комп Python 3 поставить.

Не знаю как проще всего это сделать, я PyCharm использую, но это большая IDE с кучей лишнего, если не страшен cmd, то можно установить как-то так, сохранить код в файл (например, с именем program.py) и из cmd запустить python3 program.py.
https://beginpc.ru/windows/komandnaya-stroka

Или вместо cmd открыть файл в стандартном IDLE.

1 лайк

спасибо

Если вдруг не будет интернета, то можешь попробовать такой “калькулятор”
FindPairs.rar (2.1 КБ)
EXE файл - FindPairs_EXE.rar (173.8 КБ)

Исходный код Delphi
procedure TForm1.Button1Click(Sender: TObject);
const N=4;
type arr4 = array[0..N-1] of integer;

    {сортировка}
    procedure Sort(var A : arr4);
    var i,j,t : Integer;
    begin
      for i:=0 to N-2 do
       for j:=i+1 to N-1 do
        if A[i]>A[j] then begin
           t := A[i]; A[i] := A[j]; A[j] := t
        end;
    end;

var A0, B0 : array[0..N-2] of integer;
   A, B, Res : arr4;
   TS : TStringList;
   i, cnt, p1, p2 : integer;
   S : string;

begin
  TS := TStringList.Create;
  TS.Delimiter := ',';
  TS.DelimitedText := Edit1.Text;
  if TS.Count<>(N-1) then begin
     Application.MessageBox(
     PChar('Внесите три целых числа в первую тройку чисел (внесено '+Format('%d',[TS.Count])+' ) '),
     'Ошибка исходных данных', MB_OK or MB_ICONERROR);
     TS.Free;
     Exit
  end;
  i:=0;
  try
    for i := 0 to TS.Count - 1 do A0[i] := StrToInt(TS.Strings[i]);
  except
     Application.MessageBox(PChar(Format(
     'Ошибка! %d-е значение %s не является целым число. Внесите три целых числа в первую тройку чисел ',
      [i+1, TS.Strings[i]])),
     'Ошибка исходных данных', MB_OK or MB_ICONERROR);
     TS.Free;
     Exit
  end;

  // вторая тройка чисел
  TS.DelimitedText := Edit2.Text;
  if TS.Count<>(N-1) then begin
     Application.MessageBox(
     PChar('Внесите три целых числа во вторую тройку чисел (внесено '+Format('%d',[TS.Count])+' ) '),
     'Ошибка исходных данных', MB_OK or MB_ICONERROR);
     TS.Free;
     Exit
  end;
  try
    for i := 0 to TS.Count - 1 do B0[i] := StrToInt(TS.Strings[i]);
  except
     Application.MessageBox(PChar(Format(
     'Ошибка! %d-е значение %s не является целым число. Внесите три целых числа во вторую тройку чисел ',
      [i+1, TS.Strings[i]])),
     'Ошибка исходных данных', MB_OK or MB_ICONERROR);
     TS.Free;
     Exit
  end;

  TS.Free;

  // вот, собственно, алгоритм
  Memo1.Lines.Clear;
  cnt := 0;

  for p1 := 1 to 100 do
    for p2 := 1 to 100 do begin

       for i := 0 to N-2 do A[i] := A0[i];
       A[N-1] := p1;
       Sort( A );

       for i := 0 to N-2 do B[i] := B0[i];
       B[N-1] := p2;
       Sort( B );

       for i := 0 to N - 1 do Res[i] := A[i] + B[N-1-i];

       if Abs(Res[0]-Res[1]) = Abs(Res[2]-Res[3])  then begin
          if Not CheckBox1.Checked or
             ( ((p1 div 10) = (p2 mod 10)) and ((p2 div 10) = (p1 mod 10))) then begin
               Inc(cnt);
               S := Format('Пара: %.2u %.2u [ ',[p1,p2]);
               for I := 0 to N-1 do S := S + Format('%.2u ',[ Res[i] ]);
               S := S +' ] ';
               Memo1.Lines.Append(S);
             end;
       end;


    end;
  if cnt=0 then Memo1.Lines.Append('Подходящих значений не найдено!');
end;

1 лайк