• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Маленькие задачи Паскаль

Хелен

Sparkling
Регистрация
28 Сен 2010
Сообщения
98
Реакции
2
Баллы
0
Маленькие задачи Паскаль

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


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х значное число.
 
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.
 
1. Из девяти цифр 1,2,3,...9 составить такие числа, чтобы их сумма равнялась 100 цифры, образующие каждую составленную Вами сумму, должны встречатся с ней только один раз и распологатся в обратной последовательности. Между числами можно ставить знаки плюс и минус. перед первым числом знак минус стоять не мжет. Укажите хотя бы одну такую сумму. например: 9+8+76+5-4+3+2+1=100.
Например, 98+7-6-5+4+3-2+1 = 100
 
Как я поняла, нужно составить два массива, в которых содержались бы числа от 9 до 1 и большие числа. Потом из массива брать их рандомом. Или может быть я не права?
 
Как я поняла, нужно составить два массива, в которых содержались бы числа от 9 до 1 и большие числа. Потом из массива брать их рандомом. Или может быть я не права?
Это вряд ли. Ведь в условии четко сказано: "должны встречаться только один раз и располагаться в обратной последовательности". Так что никакой Random-выборки.
А вот как эту задачку алгоритмизировать - чтоб я сдох, если знаю!
 
Вот код второй программы, пригодится =)

Код:
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.
 
Я тут немного написал вашу задачу Хелен, только сам озадачился как это закончить. Смысл в том, что я рандомом беру число двухзначное и к нему уже добавляю числа в обратном порядке, только не могу написать ограничение, на то когда сумма чисел превышает сотню. Если кто нибудь поможет, я думаю мы справимся с этой программкой. Сам писал в 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.
 
Сам если честно запутался в программе.
 
Думая с комментариями будет понятней.
Код:
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.
 
Задачка то что надо. Только вот суммы 100 не получается, а если и получается, то немного больше ста. Поставить ограничение у меня не получилось. Не совсем поняла как. Владимир, можете помочь советом?
 
Владимир, можете помочь советом?
Это всегда пожалуйста: сесть и подумать. Увы, пока ничего более конкретного не вижу. Впрочем, задачей не занимался. Попробую на досуге последовать собственному совету.
 
Н-да... "Вручную"-то эти комбинации находятся элементарно:
9-8+7+65-4+32-1=100;
9-8+76-5+4+3+21=100;
.....
А вот с алгоритмизацией - глухо.
 
Назад
Сверху