|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
30.03.2011, 15:53 | #1 (permalink) |
Sparkling
Регистрация: 29.09.2010
Сообщений: 98
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 93
|
Маленькие задачи Паскаль
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
Регистрация: 08.03.2016
Сообщений: 0
|
Можете набраться информации прочитав аналогичные темы Турбо Паскаль или Фри Паскаль. Задание по теме Типизированный файл Паскаль, три задачи на массивы Решение задачи. Паскаль Две задачи. Паскаль |
30.03.2011, 16:55 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Пусть есть двузначное число вида ab (a десятков и b единиц), т.е. a*10+b. Все эти манипуляции сводятся к ((a*10+b)*20+a*10+b)*481=(210*a+21*b)*481=101010*a +10101*b. Легко видеть, что в результате сложения получается число вида ababab. |
|
30.03.2011, 17:01 | #3 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
|
|
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) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
А вот как эту задачку алгоритмизировать - чтоб я сдох, если знаю! |
|
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) |
Member
Регистрация: 15.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Я тут немного написал вашу задачу Хелен, только сам озадачился как это закончить. Смысл в том, что я рандомом беру число двухзначное и к нему уже добавляю числа в обратном порядке, только не могу написать ограничение, на то когда сумма чисел превышает сотню. Если кто нибудь поможет, я думаю мы справимся с этой программкой. Сам писал в 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. |
01.04.2011, 00:07 | #10 (permalink) |
Member
Регистрация: 15.02.2011
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Думая с комментариями будет понятней.
Код:
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. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|