Помогите решить задачу на цикл |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Помогите решить задачу на цикл |
Гость_Den |
24.01.2005 18:14
Сообщение
#1
|
Гость |
Даны целые числа m, a1, ..., a20. Найти три натуральных числа i, j, k, каждое из которых не превосходит 20, такие, что ai+aj+ak=m. Если такихчисел нет, то сообщить об этом.
|
klem4 |
24.01.2005 18:41
Сообщение
#2
|
Perl. Just code it! Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Вот так можно попробовать :
Код 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. -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
24.01.2005 19:09
Сообщение
#3
|
Гость |
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 |
24.01.2005 19:16
Сообщение
#4
|
Perl. Just code it! Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
Хех, я тоже так сначала хотел написать, но потом вспомнил, что мне бы снизили бал в универе если бы я решил эту задачу через for и за exit.
Ведь как говорит наш велекий и могучий препод : цикл for нужно употреблять только в тех случаях, когда точно известно кол-во итераций цикла. Хотя... кто его знает, мне конечно короткий вариант больше нравится Сообщение отредактировано: klem4 - 24.01.2005 19:24 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Digitalator |
29.01.2005 0:00
Сообщение
#5
|
Бывалый Группа: Пользователи Сообщений: 247 Пол: Мужской Репутация: 1 |
//offtop
Ну и лох же твой препод.... из-за таких как он на этом форуме чило Closed Topics повышается не по дням а по часам :fie: :ypr: Сообщение отредактировано: Digitalator - 29.01.2005 0:01 -------------------- |
Текстовая версия | 28.04.2024 13:25 |