Вторник, 07.01.2025
Pascal 4 All
[ · Новые сообщения · Участники · Правила форума · Поиск · RSS ]

 

  • Страница 1 из 1
  • 1
Модератор форума: Seqular, Alexander  

Задача
infernoДата: Суббота, 17.11.2007, 14:36 | Сообщение # 1
Новичок
Группа: Пользователи
Сообщений: 1
Репутация: 0
Замечания: 0%
Статус: Offline
используя все цифры от 1 до 9 по одному разу собрать 100
пример
123-45-67+89=100
98-76+54+3+21=100
 
PavelДата: Суббота, 17.11.2007, 17:19 | Сообщение # 2
Приближенный
Группа: Модераторы
Сообщений: 210
Репутация: 17
Замечания: 0%
Статус: Offline
Сколько способов надо? Или найти тот способ, который первый сработает? Наверное это олимпиадная задача. Оччень интересная!
 
PavelДата: Суббота, 17.11.2007, 20:45 | Сообщение # 3
Приближенный
Группа: Модераторы
Сообщений: 210
Репутация: 17
Замечания: 0%
Статус: Offline
Я подумал и придумал. Вот что я придумал: Надо просмотреть все варианты знаков "+" и "-" между числами, которые возможно составить из цифр от 1 до 9. Т.е. тут развивается две задачи:
1. найти такие числа, удовлетворяющие условиям задачи (не должны повторятся цифры)
2. расставить между ними все варианты знаков.

Как видно первая задача очень непростая (покрайней мере для меня) и в своем пробном варианте решения я решил заменить этот блок на четыре константы (a, b, c, d). А роль знаков выполняют коэффициенты. Вот. Сама идея вложенных циклов вспомнилась мне из задачи о размене монет (так и не понял почему).
Надо еще подумать. Извините, модераторы тоже студенты и у них полно дел. Особенно сейчас. Учеба... Думаю, если вырвется еще свободных часа два, решу полностью. А проверка моей теории заняла около 10 минут.

Code
program sotka;
uses crt;
const
     a = 123;
     b = 45;
     c = 67;
     d = 89;

var
     kb, kc, kd: shortint;
     i, j, k, z: byte;
     r: integer;

begin
clrscr;
kb := 1;
kc := 1;
kd := 1;
r := a;

for i := 1 to 2 do
     begin
     r := a;
     kb := - kb;
     for j := 1 to 2 do
         begin
         kc := - kc;
         for k := 1 to 2 do
             begin
             r := r + kb*b + kc*c + kd*d;
             if r = 100 then
                 begin
                 writeln('Ok');
                 writeln(a, '+', kb*b, '+', kc*c, '+', kd*d, ' = 100');
                 Readkey;
                 Exit;
                 end;
             kd := - kd;
             end;
         end;
     end;
readkey;
end.
 
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2025
Используются технологии uCoz
javascript:;" rel="nofollow" onclick="loginPopupForm(); return false;