Помощь - Поиск - Пользователи - Календарь
Полная версия: Составить программу формирования массива
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
unFair
Даны натуральные числа К и N. Составить программу формирования массива А, элементами которого являются числа, сумма цифр которых ровна K и которые не больше N.

вот мой код
uses crt;
var
 a:array[1..20] of integer;
 k,n:byte;
 i,x:integer;
 procedure abc(i:integer);
begin
end;
begin
 clrscr;
 writeln('vvedite k: '); readln(k);
 writeln('vvedite n: '); readln(n);
 for i:=1 to 100 do
    if (i=k) and (i<=n) then a[i]:=i
    else if (((i mod 10)+(i div 10))=k) and (((i mod 10) or (i div 10))<n) then a[i]:=I;
 for i:=1 to 100 do
    write(a[i], ' '); readln;
    writeln;
end.

На экран вывводится примерно след:
Цитата
введите к: 5
введите n: 10
0 0 0 5 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 2565....
т.е., понятное дело, совершенно не то, что нужно
ПС: Задача на процедуру, но я её только описал, т.к. не знаю что она должна делать в задаче.
Altair
Предлагаю алгоритм:
Function summz(n:integer):byte;
var result:byte;
begin
result:=0;
while n>0  do
begin
 inc(result,n mod 10);  n:=n div 10
end;
summz:=result;
end;

var
a:array[1..10] of integer;
i, ran, k,n:integer;
begin
randomize;
readln(k,n);
for i:=1 to 10 do
begin
 repeat
  ran:=random(n);
 until summz(ran)=k;
 a[ i ]:=ran;
end;
for i:=1 to 10 do write(a[ i ],' ');
end.


Обоснование:
При генерации чисел функция Random возвращает числа равномерно распределенные в интерале, следовательно за время T, мы получим знаение любое, если такое значениеможет существовать в необходимом интервале.
GoodWind
Цитата
inc(result,n mod 10);  n:=n div 10;

красивое решение
Altair
Я последнее время стал неравнодушен к интереным конструкциям smile.gif
А насчет процедуры - unFair, алгоримт я показал, в процедуру что тебе надо сам загонишь!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.