Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите решить задачу на цикл
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Гость_Den
Даны целые числа m, a1, ..., a20. Найти три натуральных числа i, j, k, каждое из которых не превосходит 20, такие, что ai+aj+ak=m. Если такихчисел нет, то сообщить об этом.
klem4
Вот так можно попробовать :

Код
uses crt;
const n=5;
var a:array[1..n] of integer;
   i,j,k:integer;
   m:integer;
   flag:boolean;
   nfind1,nfind2,nfind3:integer;

Begin
  clrscr;
  readln(m);
  for i:=1 to n do
   readln(a[i]);
  i:=1;
  while (i<=n-1)and(not(flag)) do
   begin
      j:=i+1;
      while (j<=n-2)and(not(flag)) do
       begin
          k:=j+1;
          while (k<=n)and(not(flag)) do
           begin
              if a[i]+a[j]+a[k]=m then
               begin
                  flag:=true;
                  nfind1:=i;
                  nfind2:=j;
                  nfind3:=k;
               end;
              inc(k);
            end;
           inc(j);
       end;
      inc(i);
  end;
  writeln;
  if not(flag) then writeln('NO')
   else
      begin
         writeln('i=',nfind1);
         writeln('j=',nfind2);
         writeln('k=',nfind3);
      end;
  readln;
end.
volvo
klem4
Программа, идентичная твоей:
Код
uses crt;
const n=20;
var
 a:array[1..n] of integer;
 i,j,k:integer;
 m:integer;

Begin
 clrscr;
 readln(m);
 for i:=1 to n do
   readln(a[i]);
 for i := 1 to n - 1 do
   for j := i + 1 to n - 2 do
     for k := j + 1 to n do
       if a[i]+a[j]+a[k]=m then
         begin
           writeln( 'i = ', i, ' j = ', j, ' k = ', k ); exit
         end;
 writeln('no');
 readln;
end.

А если не видно разницы, зачем писАть больше? ;)
klem4
Хех, я тоже так сначала хотел написать, но потом вспомнил, что мне бы снизили бал в универе если бы я решил эту задачу через for и за exit.

Ведь как говорит наш велекий и могучий препод : цикл for нужно употреблять только в тех случаях, когда точно известно кол-во итераций цикла.

Хотя... кто его знает, мне конечно короткий вариант больше нравится smile.gif
Digitalator
//offtop
Ну и лох же твой препод.... из-за таких как он на этом форуме чило Closed Topics повышается не по дням а по часам :fie: :ypr:
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.