|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
10.05.2012, 17:25 | #1 (permalink) |
Member
Регистрация: 01.05.2012
Сообщений: 17
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Проверьте почему не работает правильно
ТЕРЕЗИ Є терези і набір гир масою 1,3,9,27,…,3^(n-1)кг, причому кожна гиря в єдиному екземплярі. На ліву шальку терезів кладуть предмет масою m кг (0 <=m<=3). Потрібно розподілити гирі на терезах так, щоб досягти балансу. Не обов 'язково використовувати всі гирі. 2.2 Задача на мові Free Pascal Program Scles; Cont Weight:Array[0..19] of longint =(1,3,9,27,81,243,729,2187,6561,19683,59049, 177147,531441,1594323,4782969,14348907, 43046721,129140163,387420489,1162261467); Var m,n temp,i,j:longint; d:Array[0..20] of -1..1; begin Assign(input,'Input.txt'); reset(Input); Readln(m,n); Close(Input); temp:=m; i:=1; While temp>0 do begin D[i]:=temp mod 3 ; If D[i]=2 then d[i]:=-1; temp:=(temp-D[i]) div 3; Inc(i) end; Assign(Output,'Output.txt'); Rewrite(Output); Write(m); Writeln; Close(output); end. 3.1 Опис вхідних і вихідних даних Формат вхідних даних: у першому рядку файла lnput.txt — числа m і n (n < 20) (цілі невід'ємні),розділені символом «пробіл». Формат вихідних даних: у першому рядку файла Output.txt — число m i маси гир на лівій шальці в порядку зростання. У другому рядку — маси гир на правій шальці терезів у порядку зростання. Приклад введення і виведення даних: lnput.txt Output.txt 5 3 5 1 3 9 3.2 Етапи розробки програми Домовимось укладання гир на ліву шальку кодувати «-1», а на праву — «1». Невикористана гиря буде кодуватися нулем. Тоді розв'язком задачі буде число m, переведене у так звану врівноважену трійкову систему числення: m = d[0]*1 + d[1]*3 + d[2]*З2 +... + d[k]*Зk, (1). де кожен з коефіцієнтів d[i] набуває одне з трьох значень -1, 0 або 1. Відмінність від звичайної трійкової системи в тому, що в цій системі замість цифр 0,1 і 2 використовуються цифри 0,1 і -1. Розглянемо алгоритм запису числа m у зрівноваженій трійковій системі числення: • знаходимо залишок від ділення числа m на 3; • якщо залишок дорівнює 2, то заміняємо його на -1; • зменшуємо m на щойно отриманий залишок і беремо цілу частину від ділення на 3 - нове значення m (у звичайній трійковій системі беремо тільки цілу частину від ділення m на 3); • повторюємо ці дії, доки m > 0. Очевидно, що цей процес скінченний. Залишається розподілити гирі на терезах: на ліву шальку терезів кладемо масу m і, відповідно, ті гирі, біля яких у співвідношенні (1) стоїть коефіцієнт -1, а на праву кладемо ті гирі для яких відповідний коефіцієнт дорівнює 1. Відповідно гирі з коефіцієнтом 0 не використовуємо. Так, для наведеного в умові тесту матимемо співвідношення: 5= —1*1±1*3 + 1*32, а для m = 10 наступне 10= 1*1 + 0*3 + 1*32. |
10.05.2012, 17:25 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Я уверен, проблема решиться если ознакомиться с похожими темами Не могу понять почему не работает колонка Почему на компьютере плохо работает интернет? Проверьте печатку Почему не работает, никто не знает? Не работает Мозилла, почему? Почему не работает Kies? |
11.05.2012, 12:27 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Написав свою програму. Ось вона. Нехай комп'ютер сам вважає ваги гир - він залізний.
Код:
Var m0,m,Max_W,i,counter,q:Integer; f:Text; Res:Array[1..20] of ShortInt; Function Pw3(v:byte):LongInt; var t:byte; P:LongInt; begin if v=0 then P:=1 else begin P:=1; for t:=1 to v do P:=P*3; end; Pw3:=P; end; Begin Assign(f,'Input.txt'); Reset(f); Readln(f,m0,Max_W); Close(f); m:=m0; counter:=0; Repeat q:=m mod 3; if q=2 then q:=-1; Inc(counter); If counter<=Max_W then Res[counter]:=q; m:=m div 3; if q=-1 then m:=m-q; Until (q=1) and (counter>1); Write(m0,' = '); If counter<=Max_W then For i:=counter downto 1 do if i=counter then write(Pw3(i-1)) else if Res[i]=-1 then write(Pw3(i-1)*Res[i]) else write('+',Pw3(i-1)*Res[i]); Assign(f,'Output.txt'); Rewrite(f); If counter>Max_W then writeln(f,'No solution!') else begin write(f,m0); for i:=1 to counter do if Res[i]=-1 then write(f,' ',Pw3(i-1)); writeln(f); for i:=1 to counter do if Res[i]=1 then write(f,' ',Pw3(i-1)); end; Close(f); Readln; End. |
11.05.2012, 15:13 | #3 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Трохи виправив. Виділено червоним кольором.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|