Салмақ және жүк

Programming Solutions /
Үлкен тарелка берілген. Ортасынан қақ бөлінген сызық бар. Бір жағына жүк, екінші жағына гир қойып тарелканы тепетеңдікте ұстау керек.Сізге М кг жүк берілсе, 2-нің n дәрежесіндегі гирлерді пайдаланып, (2, 4, 8, 16, 32, 64 ..) тарелкаға жүк пен гирлерді қою керек.

Мысалы, 18 кг жүк болса, 2 кг гирден 9 немесе 16 кг (2-нің 4 дәрежесі) және 2 кг 2 дана гир ғана қоя салуға болады.

Есепті шешумен қатар, оны барынша қысқа да қызықты жолмен шығарған адамға сыйлық беріледі. Мысал ретінде, 39 кг жүкті алуға болады.

ПыСы: есептің шығарылу жолын да келтіріңіз. Кез-келген бағдарламалау тілінде программалап шығарсаңыз, ол пргограммаңыз кез келген салмақтағы жүкке қатысты шығаратын формуласымен болса, тағы да сыйлық бар.

22 пікір

qyrmyzy
Әттең, мынаған миым жетпейді…
m170785
неге жетпейді, пәлсапалық қыздың ойы жететін еді ғой ))
Gau
39=32(2-нің 5 дәрежесі)+4(2-нің 2 дәрежесі)+2+1(немесе 3 кг)

немесе
kaz007
39= 2^5+2^2+2^1+2^0
программалау түрінде

for i=1,n
s[i]=i^n
AL-ASTER
Массивте берілген циклмен 39 кг үшін ғана қажет гирлерді қалай анықтаймыз?
Abylai
мә мынаны көрмеппін. универсалды формула шығару керек па?
AL-ASTER
axa
Abylai
мынауың қиындау екен, тіпті үйден ақтарып жүріп қалам мен қағаз тауып алып, әйдәә шығаруға тырысып жатырмын, қазір нәтижесі болса жазам
AL-ASTER
үштік, төрттік санау жүйесімен де бір қарап жібер)
Abylai
мынауың көмек үшін қосымша ақпарат па әлде қалжыңдап жаздың ба? щықпай жатыр программа, санау жүйесін қарамаппын )
AL-ASTER
посттағы тапсырма орындалса, әрі қарай басқа санау жүйелерімен күрделендіруге болар ед
Abylai
М максимум қаншаға дейін бара алады?
AL-ASTER
Negizi shekteu zhoq. Azirge 39 dep aldyq.
Abylai
Екі сағат ойланғандағы шығарған қисық кодым. Кодттағы артық айнымалылар үшін кешірім сұраймын, сағат түнгі екі жарым екенін ескерерсіз

<code>$m = 39;
$m2 = decbin($m); // мына функция санды екілік жүйеге айналдырады;
$kol = iconv_strlen($m2) - 1; // мына айнымалыға екілік жүйедегі санның қанша символдан тұратынын афункция арқылы анықтап жазамыз (бұл мысалда 5 санын қайтарады)
$i = 0; // цикл үшін
$v = 0; // өзім үшін, ыңғайлылық үшін, мында екі санының дәрежелері жазылады
while ($kol >= 0) { // цикл басталды, айнымалы нольге тең немесе үлкен болған жағдайда
$w = pow(2, $kol) * $m2[$i]; // бұл айнымалы екінің $kol дәрежесін шығарып оны бірге көбейтеді
if ($w != 0) { егер нәтиже ноль болмаса
$v ++;
if ($v == 1) {
$sh = $w; // онда ол екінің дәрежесін тірке
}
else {
$sh = $sh.' + '.$w; // бұл да тіркейді ыңғайлылық үшін жасап едім былай
}
}
$i ++;
$kol --;
}
echo '<br />'.$m.' = '.$m2.'<sub>2</sub> = '.$sh.' = '.$m;// нәтижені экранға шығару</code>
Abylai
бұл php бағдарламалау тілінде жазылды, сосын не ғо бағдарламаны мына жеге жүктеп қойдым, тексеріп көрулеріңізге болады, кез келген санның екінің дәрежелерін қолдану арқылы ең қысқа, тиімді жолын шығарып береді. hosting.users.kz/esep.php
Abylai
айтпақшы php бағдарламасының decbin() функциясы 4294967295 санынан жоғары санды қабылдай алмайтынын ескере отырып, біздің M массасының максимум салмағы 4294967295кг екендігін айта кетейін. ну енд солай бопқалд
Abylai
Амиго осындай есептерің болса тағы жазшы (: ойлануға жақсы екен. Міне мына есептің тағы бір шешу жолы. Меніңше осы ең қысқа код сияқты. Екілік жүйеге аудармай шығарылады. Алгоритмін үйге барғасын асықпай суретпен сызып көрсетермін. Коды міне

<code>$n = 39;
$k = 0;
echo $n.' = ';
while ($n != 0) {
if (pow(2, $k) > $n) {
$n = $n - pow(2, $k-1);
echo pow(2, $k - 1).'; ';
$k = 0;
}
$k ++;
}</code>

Мына жерден тексеніп көре аласың. Біріншісі екілік жүйемен шығарады, екіншісі екілік жүйеге аудармай шығарады.
AL-ASTER
Разговор жоқ: сыра:

Қалай, логикалық/математикалық әлемнен шығып, программалау айдарын ашып алсақ қалай)

Сол жерге программалауды сүйетіндер жиналамыз)
Abylai
ашайық, қосыламын
AL-ASTER
Есептің дереккөзі, осы лекцияның басы еді:

салам матиматикалык тұрғыдан есеп шешілгенімен материалдық-логикалық тұрғыдан 39 санын алу мүмкін емес немесе есептін логикалық берілуі қате
Тек тіркелген қолданушылар ғана пікір қалдыра алады.