Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2018, 19:28   #1
Vladik_2954
 
Регистрация: 17.10.2018
Сообщений: 8
По умолчанию Помогите с Олимпиадой ребята

Я решил 3 задачи из олимпиады, вот заканчиваю задачку. Подскажите что не так?
Условие:Вывести на экран все трехзначные числа, сумма цифр которых равна N.
Пытаться перебирать все трехзначные числа от 100 до 999, затем каким-то образом делением и вычитанием выделять отдельные цифры, искать их сумму, сравнивать с N достаточно сложно. Исходя из того, что трехзначное число состоит из 3 цифр, причем первая изменяется от 1 до 9, а вторая и третья – от 0 до 9.
Вот что я решил:
Код:
program Z3 ;
var
  h, i, m, k, n: integer;

begin
  write('Введите N=');
  readln(n);
    for i := 1 to 9 do
      for m := 0 to 9 do
        for k := 0 to 9 do
          if i + m + k = n then writeln(i, m, k);
end.
Пожалуйста, оформляйте Ваш код согласно правилам.

Последний раз редактировалось Вадим Мошев; 18.10.2018 в 11:56.
Vladik_2954 вне форума Ответить с цитированием
Старый 17.10.2018, 19:54   #2
сфинкс
Форумчанин
 
Аватар для сфинкс
 
Регистрация: 17.06.2012
Сообщений: 957
По умолчанию

3-ёх значное число:

i*100+m*10+k

или научнее:
i*10^2+m*10^1+k*10^0

и надеюсь в исходной программе
циклы закрываются правильно

и на вопрос как выделять цифры из числа:
также как и в прошлом ... веке:

число переводится в стринг
и переводятся в цифры отдельные символы

а вообще в моей главной теме
есть классная олимпийская задача

рассмотрели бы на информатике
Случайные и Массивы https://programmersforum.ru/showthread.php?t=344371 Учим C# & basic & excel & python https://programmersforum.ru/showthre...=327446&page=5 ничего нерекомендую

Последний раз редактировалось сфинкс; 17.10.2018 в 20:08.
сфинкс вне форума Ответить с цитированием
Старый 17.10.2018, 20:03   #3
Vladik_2954
 
Регистрация: 17.10.2018
Сообщений: 8
По умолчанию

посмотри у меня в темах еще помощь нужна)
Vladik_2954 вне форума Ответить с цитированием
Старый 17.10.2018, 22:40   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Vladik_2954 Посмотреть сообщение
Вот что я решил Program Z3 ;
ну и нормальное решение.
Что не устроило?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.10.2018, 07:38   #5
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Можно избавиться от самого внутреннего цикла
Код:
var
  h, i, m, k, n: integer;

begin
  write('Введите N=');
  readln(n);
    for i := 1 to 9 do
      for m := 0 to 9 do
      begin
          k := n-i-m;
          if (k >= 0) and (k<10) then writeln(i, m, k);
      end;
end.
FPaul вне форума Ответить с цитированием
Старый 18.10.2018, 12:00   #6
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Либо, если допускается работать с множествами, то условие можно немного сократить:
Код:
if k in [1..9] then writeln(i, m, k);
Вадим Мошев вне форума Ответить с цитированием
Старый 18.10.2018, 23:26   #7
Bart`s
Пользователь
 
Регистрация: 21.09.2018
Сообщений: 14
По умолчанию

я не въехал в предыдущие Комменты, но если правильно понял, то вот ещё вариант как сделать не перебирая лишние вариации чисел. на плюсах только.
Код:
int main(){
int n,j,k;
cin>>n;
for(int i=1;i<=n;i++)
   for(j=0, k=n-i; k>=0;j++,k--)
      cout<<i<<j<<k<<endl;				
getch();
}
Bart`s вне форума Ответить с цитированием
Старый 18.10.2018, 23:58   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Bart`s Посмотреть сообщение
то вот ещё вариант как сделать не перебирая лишние вариации чисел. на плюсах только.
реально?
Вы думаете, что это будет работать?
Введите N, например, 25 и расскажите, что выдала программа.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как в ворде между каждой буквой вставить определенную букву? andrey1010 Microsoft Office Word 2 26.05.2014 16:08
РЕБЯТА ПОМОГИТЕ andrey1010 Microsoft Office Word 1 17.04.2014 22:21
Помогите с олимпиадой :) Лен4uк Помощь студентам 13 22.11.2013 21:05
Помосчь с республиканской олимпиадой.[9 класс] Andrel007 Помощь студентам 0 25.04.2011 17:06
Ребята, помогите... irinka123 Паскаль, Turbo Pascal, PascalABC.NET 1 13.04.2009 09:07