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