Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Маленькие задачи Паскаль (http://www.tehnari.ru/f43/t49646/)

Хелен 30.03.2011 15:53

Маленькие задачи Паскаль
 
Привет. Помогите маленькие задачки решить пожалуйста. =)


1.
Из девяти цифр 1,2,3,...9 составить такие числа, чтобы их сумма
равнялась 100 цифры, образующие каждую составленную Вами сумму, должны
встречатся с ней только один раз и распологатся в обратной
последовательности. Между числами можно ставить знаки плюс и минус.
перед первым числом знак минус стоять не мжет. Укажите хотя бы одну
такую сумму.
например: 9+8+76+5-4+3+2+1=100.

2.
число 481 магическое. Если взять любое 2-х значное число умножить на 2 и приписать в конце 0 (т.е. умножить на 10) и + тоже самое 2х значное
число (А*2*10+А)*481 .... (24*2*10+24)*481=242424. (А*А*А)
Проверить так ли это, если ввести любое 2х значное число.

Vladimir_S 30.03.2011 16:55

Цитата:

Сообщение от Хелен (Сообщение 494759)
2. число 481 магическое. Если взять любое 2-х значное число умножить на 2 и приписать в конце 0 (т.е. умножить на 10) и + тоже самое 2х значное число (А*2*10+А)*481 .... (24*2*10+24)*481=242424. (А*А*А) Проверить так ли это, если ввести любое 2х значное число.

Обойдемся без Паскаля.
Пусть есть двузначное число вида ab (a десятков и b единиц), т.е. a*10+b.
Все эти манипуляции сводятся к
((a*10+b)*20+a*10+b)*481=(210*a+21*b)*481=101010*a +10101*b. Легко видеть, что в результате сложения получается число вида ababab.

Vladimir_S 30.03.2011 17:01

Цитата:

Сообщение от Хелен (Сообщение 494759)
1. Из девяти цифр 1,2,3,...9 составить такие числа, чтобы их сумма равнялась 100 цифры, образующие каждую составленную Вами сумму, должны встречатся с ней только один раз и распологатся в обратной последовательности. Между числами можно ставить знаки плюс и минус. перед первым числом знак минус стоять не мжет. Укажите хотя бы одну такую сумму. например: 9+8+76+5-4+3+2+1=100.

Например, 98+7-6-5+4+3-2+1 = 100

Хелен 31.03.2011 09:34

Цитата:

Сообщение от Vladimir_S (Сообщение 494818)
Обойдемся без Паскаля.

Без Паскаля в наше время - никуда )))

Вторую программу написала,а вот по поводу первой...
всё-таки нужна помощь ))

Хелен 31.03.2011 10:12

Как я поняла, нужно составить два массива, в которых содержались бы числа от 9 до 1 и большие числа. Потом из массива брать их рандомом. Или может быть я не права?

Vladimir_S 31.03.2011 10:26

Цитата:

Сообщение от Хелен (Сообщение 495275)
Как я поняла, нужно составить два массива, в которых содержались бы числа от 9 до 1 и большие числа. Потом из массива брать их рандомом. Или может быть я не права?

Это вряд ли. Ведь в условии четко сказано: "должны встречаться только один раз и располагаться в обратной последовательности". Так что никакой Random-выборки.
А вот как эту задачку алгоритмизировать - чтоб я сдох, если знаю!

Хелен 31.03.2011 12:17

Вот код второй программы, пригодится =)

Код:

Program num;
uses crt;
var
i,sum,sum1,n,c:integer;
r:boolean;
begin
writeln;
for i:=1 to 100 do
begin
writeln;
writeln('Enter 2-x count: ');
read(n);
if(n<10)
then
writeln('Ошибка, число должно быть больше 1-го знака')
else
if(n>=100)
then
writeln('Ошибка, возможны только 2x значные числа')
else
begin
sum:=(n*2*10+n)*481; sum1:=sum;
writeln(sum);
if sum mod 100 = n
then
begin
writeln(sum mod 100);
inc(c);
if sum mod 10000 = (n*100+n)
then
begin
writeln(sum mod 10000);
inc(c);
if sum mod 1000000 = sum1
then
begin
writeln(sum mod 10000000);
inc(c);
end;
end;
end;
if(c=3)
then
begin
writeln;
writeln('YOU WINNER');
end;
end;
end;
end.


ZEKE 31.03.2011 23:31

Я тут немного написал вашу задачу Хелен, только сам озадачился как это закончить. Смысл в том, что я рандомом беру число двухзначное и к нему уже добавляю числа в обратном порядке, только не могу написать ограничение, на то когда сумма чисел превышает сотню. Если кто нибудь поможет, я думаю мы справимся с этой программкой. Сам писал в PascalABC.

Вот код:
Код:

Program num;
uses crt;
var
x,y,z,i,t,p,s,q,d,a,j,b,c:integer;
begin
randomize;
repeat
    x:=random(70);
      y:=x mod 10;
      z:=x div 10;
until y+1=z;
        write(x);
        q:=y;
        d:=10;
 for i:=1 to 50 do
        begin
        p:=random(9);
        if(p+1=q)
        then
        begin
        write('+',p);
        t:=t+p;
if(p=0) or (p=00)
        then
        begin
repeat
        j:=j+d;
        d:=d-1;
        write('+',d);
until d=z+1;
        end;
        q:=q-1;
          end;
          end;
 if(x+t>=100)
        then
        begin
        repeat
        b:=(x+t-100);
        write('-',b);
        c:=d-b;
        until c=100;
        writeln('limit = ',t+j+x);
        end
        else
        begin
        writeln('=',t+j+x);
        writeln('symma ne ravna; 100');
          end;
        end.


ZEKE 31.03.2011 23:33

Сам если честно запутался в программе.

ZEKE 01.04.2011 00:07

Думая с комментариями будет понятней.
Код:

Program num;
uses crt;
var
x,y,z,i,t,p,s,q,d,a,j,b,c:integer;
begin
randomize;
repeat
    x:=random(70);  рандомное 2-x значное число
      y:=x mod 10;  Разбиваю число на 
      z:=x div 10;          две части
until y+1=z;
        write(x);     
        q:=y;   
        d:=10;       
 for i:=1 to 50 do    вывод чисел в обратном порядке
        begin
        p:=random(9);    рандом из 9 чисел
        if(p+1=q)        если число меньше заданного на единицу
        then
        begin
        write('+',p);    записать его в плюс
        t:=t+p;        сложить сумму чисел
if(p=0) or (p=00)    если дошли до нуля и 100 не набрали
        then
        begin
repeat
        j:=j+d;       
        d:=d-1;    отнимать единицу от каждого предыдущего числа
        write('+',d);  записать числа которые еще не встречались
until d=z+1;         
        end;
        q:=q-1;   
          end;
          end;
 if(x+t>=100)  а тут уже начал мудрить с лимитом,
        then            когда сумма превышает 100
        begin               
        repeat
        b:=(x+t-100);
        write('-',b);
        c:=d-b;
        until c=100;
        writeln('limit = ',t+j+x);
        end
        else
        begin
        writeln('=',t+j+x);
        writeln('symma ne ravna; 100');
          end;
        end.



Часовой пояс GMT +4, время: 00:21.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.