IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Натуральные числа, найти число
Айра
сообщение 31.10.2007 23:16
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 731
Пол: Женский

Репутация: -  25  +


Цитата
Для любого натурального n найти число, составленное из 1-ц и 2-ек, делящееся на 2n

Вот что у меня получилось:
var n,n2,a,d,x,ch: longint;
f: boolean;
const max=2147483647;
begin
write('введите значение n: ');
readln(n);
if (n mod 5=0) then writeln('для n=',n,' искомого числа не существует')
else
begin
a:=0;
n2:=2*n;
x:=0;
repeat
begin
f:=true;
x:=0;
a:=a+n2;
d:=a;
while (d<>0) and f do
begin
ch:=d mod 10;
if (ch<>1) and (ch<>2) then f:=false;
d:=d div 10;
end;
if f then x:=a;
end;
until (a>=max) or f;
writeln('для n=',n,' x=',x,'')
end;
end.

Вроде работает нормально.. но может можно что-то упростить или сделать лучше? rolleyes.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 1.11.2007 9:29
Сообщение #2


Гость






"Раз пошла такая пьянка" (С) smile.gif

Оля,
еще один способ (правда, чуть более медленный, ибо - рекурсия, но вроде изначально о предельной скорости выполнения речь не шла) вывода нужных тебе чисел:

var
n: integer;
const
min: longint = maxlongint;

procedure check(X: longint);
var T: longint;
begin
if (X > 0) and (X mod (2*n) = 0) then begin
if min > X then min := X; exit;
end
else begin
if X < MaxLongInt div 10 then begin
check(10 * X + 1); check(10 * X + 2);
end;
end;
end;

begin
write('n = '); readln(n);
check(0);
writeln(min);
end.


(если убрать махинации с min - то будут напечатаны ВСЕ числа в интервале 1 .. MaxLongInt, делящиеся на 2n)
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 12:43
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"