Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 30.03.2011, 15:53   #1 (permalink)
Хелен
Sparkling
 
Аватар для Хелен
 
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
Arrow Маленькие задачи Паскаль

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


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х значное число.
Хелен вне форума   Ответить с цитированием

Старый 30.03.2011, 15:53
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Можете набраться информации прочитав аналогичные темы

Турбо Паскаль или Фри Паскаль. Задание по теме Типизированный файл
Паскаль, три задачи на массивы
Решение задачи. Паскаль
Две задачи. Паскаль

Старый 30.03.2011, 16:55   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Хелен Посмотреть сообщение
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   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Хелен Посмотреть сообщение
1. Из девяти цифр 1,2,3,...9 составить такие числа, чтобы их сумма равнялась 100 цифры, образующие каждую составленную Вами сумму, должны встречатся с ней только один раз и распологатся в обратной последовательности. Между числами можно ставить знаки плюс и минус. перед первым числом знак минус стоять не мжет. Укажите хотя бы одну такую сумму. например: 9+8+76+5-4+3+2+1=100.
Например, 98+7-6-5+4+3-2+1 = 100
Vladimir_S вне форума   Ответить с цитированием
Старый 31.03.2011, 09:34   #4 (permalink)
Хелен
Sparkling
 
Аватар для Хелен
 
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Обойдемся без Паскаля.
Без Паскаля в наше время - никуда )))

Вторую программу написала,а вот по поводу первой...
всё-таки нужна помощь ))
Хелен вне форума   Ответить с цитированием
Старый 31.03.2011, 10:12   #5 (permalink)
Хелен
Sparkling
 
Аватар для Хелен
 
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
По умолчанию

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

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 31.03.2011, 10:26   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Хелен Посмотреть сообщение
Как я поняла, нужно составить два массива, в которых содержались бы числа от 9 до 1 и большие числа. Потом из массива брать их рандомом. Или может быть я не права?
Это вряд ли. Ведь в условии четко сказано: "должны встречаться только один раз и располагаться в обратной последовательности". Так что никакой Random-выборки.
А вот как эту задачку алгоритмизировать - чтоб я сдох, если знаю!
Vladimir_S вне форума   Ответить с цитированием
Старый 31.03.2011, 12:17   #7 (permalink)
Хелен
Sparkling
 
Аватар для Хелен
 
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
По умолчанию

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

Код:
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.
Хелен вне форума   Ответить с цитированием
Старый 31.03.2011, 23:31   #8 (permalink)
ZEKE
Member
 
Регистрация: 15.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Exclamation

Я тут немного написал вашу задачу Хелен, только сам озадачился как это закончить. Смысл в том, что я рандомом беру число двухзначное и к нему уже добавляю числа в обратном порядке, только не могу написать ограничение, на то когда сумма чисел превышает сотню. Если кто нибудь поможет, я думаю мы справимся с этой программкой. Сам писал в 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   #9 (permalink)
ZEKE
Member
 
Регистрация: 15.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Сам если честно запутался в программе.
ZEKE вне форума   Ответить с цитированием
Старый 01.04.2011, 00:07   #10 (permalink)
ZEKE
Member
 
Регистрация: 15.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Post

Думая с комментариями будет понятней.
Код:
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.
ZEKE вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.