На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».

АвторСообщение



Сообщение: 1
ссылка на сообщение  Отправлено: 08.01.21 07:39. Заголовок: Задача 26 (№2708 Е.Джобс)


Задача. 35) (Е. Джобс) В проекте «СкупойПлатитДважды» 1 января решено тратить на развитие 60% накоплений всех участников. При этом 20% самых богатых участников вносят 80% от своих накоплений, остальные участники вносят равный процент таким образом, чтобы общая сумма взносов всех участников составила 60%, обозначенные выше.
Запишите в ответе два целых числа: сумма взноса от всех «богатых» участников проекта и сумма взноса участника с самым небольшим размером накоплений.

Первый ответ сходится - 143518. А вот со вторым проблема. На сайте в ответе 4. Несколько раз проверил своё решение - 5!
Либо подскажите где моя ошибка, либо ... ну, если не моя ошибка, то вам виднее, что там дальше делать.
Моё решение:

Var i,j,k,Sm,Sb,SUM,N,Kb,Km:integer;
a:array[1..10000] of integer;
f:text;
Begin
Assign(f,'C:\Users\User1\Downloads\26-j7.txt');
Reset(f);
ReadLn(f,N);
SUM:=0;Sb:=0;Kb:=round(N*0.2);Km:=n-Kb;
For i:=1 to N do begin //заполнение массива и подсчёт общ суммы
Read(f,a[ i ]);
SUM:=SUM+a[ i ]; //все накопления
end;
Close(f);
Writeln('ВСЕ накопления: ',SUM);
For i:=1 to n-1 do //сортировка массива
For j:=2 to n-i+1 do
if a[j]<a[j-1] then begin
a[j]:= a[j]+a[j-1];
a[j-1]:= a[j]-a[j-1];
a[j]:= a[j]-a[j-1];
end;
For i:=Km+1 to N do Sb:=Sb+a[ i ];
WriteLn('Накопления богатых: ',Sb);
WriteLn(round(Sb*0.8)); //все взносы богатых
Sm:=SUM-Sb;WriteLn('Накопления бедных: ',Sm); //все накопления бедных
SUM:=round(Sum*0.6);WriteLn('Общий взнос: ',SUM);
Sb:=round(Sb*0.8);WriteLn('Взнос богатых: ',Sb);
WriteLn('Ставка бедных: ',(SUM-Sb)/Sm);
WriteLn(round(a[1]*(SUM-Sb)/Sm)); //взнос самого бедного
end.

Последние "Write"-ы - это я уже ошибку искал.

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 7 [только новые]







Сообщение: 12
ссылка на сообщение  Отправлено: 08.01.21 11:13. Заголовок: Необходимо привести ..


Необходимо привести целое число, полученное из суммы платежей. Это не округление, а взятие целой части.

Хочешь 100? Готовься на 110! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 5
ссылка на сообщение  Отправлено: 21.02.21 14:12. Заголовок: Тажа беда :/ def Z2..


Тажа беда :/
 
def Z2708():
#N, Arr = Loader5("26-j7.txt")
N, Arr = 10, sorted([10, 12, 25, 25, 40, 35, 18, 19, 10, 12])
T = int(N * 0.8)
TP = N - T
Proc = (0.6 * N - 0.8 * TP) / T
print(Proc, (Proc * T + 0.8 * TP) / N == 0.6)
print(int(sum(Arr[T:]) * 0.8))
print(min(Arr) * Proc)
Z2708()

Последний print вываливает 5.5, что при int дало бы 5, а у них в ответе 4 :/
Прикол в том, что высчитывается 55% (т.е. 0.55) и даже при попытке найти среднего арифметического, я получаю изначальные 60%, что доказывает правильность нахождения 55%, это видно в первом из 3 принтах.
Т.е. должно было выпасть от 40 до 49%, чтобы самый бедный чел (накопления = 10) дал 4

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 6
ссылка на сообщение  Отправлено: 21.02.21 14:45. Заголовок: Вопрос в том, как он..


Вопрос в том, как они находили свои 40-49% если правильным будет 55% что в среднем арифметическом нам возвращает наши 60% :/

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 24
ссылка на сообщение  Отправлено: 21.02.21 15:40. Заголовок: Изучите решение тут:..


Изучите решение тут:
Разбор задачи (видео на Youtube)

Хочешь 100? Готовься на 110! Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 7
ссылка на сообщение  Отправлено: 21.02.21 16:35. Заголовок: EugeneJobs пишет: И..


EugeneJobs пишет:

 цитата:
Изучите решение тут:
Разбор задачи (видео на Youtube)


Спасибо!!! Понимаю это чувство, когда башка не варит ;'-}}} Вы только меня подтолкнули на мыслю тем видео, разделить то, что не доплатили остальные (не богатые) на общую сумму, что есть у остальных. Вышло 0.48872955522338074, а это 48.9% по сути, а не 55% XD видимо средним арифметическим считать такое нельзя, вот я и сомневался, что коллизии будут ;'-}}}
Вышло:
 
Вывод:
Proc: 0.48872955522338074
143518 4
Сама прога, писанная мною :S :
def Loader5(Name):
with open(GPath + Name) as file:
N = int(file.readline())
Arr = [int(file.readline()) for i in range(N)]
Arr.sort()
return N, Arr

def Z2708():
N, Arr = Loader5("26-j7.txt")
#N, Arr = 10, sorted([10, 12, 25, 25, 40, 35, 18, 19, 10, 12])
T = int(N * 0.8)
TP = N - T
#Proc = (0.6 * N - 0.8 * TP) / T
#print(Proc, (Proc * T + 0.8 * TP) / N == 0.6)
#print(int(sum(Arr[T:]) * 0.8))
#print(min(Arr) * Proc)
B = sum(Arr[T:]) * 0.8
All = sum(Arr) * 0.6
A = All - B
AllA = sum(Arr[:T])
Proc = A / AllA
print("Proc:", Proc)
print(int(B), int(min(Arr) * Proc))

Z2708()


Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 3
ссылка на сообщение  Отправлено: 05.05.22 17:56. Заголовок: Решение на Питоне


Сортировка списка с денежными взносами сделана в обратном порядке, так удобнее вести расчеты

 
# 20% самых богатых участников вносят 80%
# остальные (бедные) - равный процент
# общая сумма взносов всех участников составила 60% от исходных денег

f = open("./26/26-j7.txt")
n = int(f.readline().strip())
x = [0]*n
for i in range(n):
x = int(f.readline().strip())
f.close()

x.sort(reverse=True)

n20 = n // 5 # количество богатых 20%

s100 = sum(x)
sRich = sum(x[0:n20])
sLow = sum(x[n20+1:])
# s60 = sRich * 0.8 + sLow * proc = s100 * 0.6

proc = (s100 * 0.6 - sRich * 0.8)/sLow
sRichItog = sRich * 0.8
sLowItog = sOther* proc

print("Кол-во богатых = ", n20)
print("S всех денег = ", s100 )
print("s Rich = ", sRich)
print("s Low = ", sLow )
print(f"% внесенный бедными = {proc*100:10.3f} \n")

print("60% от s100 = ", s100*0.6)
print(f"от богатых = {sRichItog:10.3f}")
print(f"от бедных = {sLowItog :10.3f}", )
print(f"min взнос = {x[n-1]*proc:10.3f}")


# ОТВЕТ: 143518 4
#1. сумма взноса от всех богатых участников
#2. взноса участника с min накоплений.

Спасибо: 0 
ПрофильЦитата Ответить





Сообщение: 4
ссылка на сообщение  Отправлено: 05.05.22 17:58. Заголовок: Решени на Питоне - правка


Опечатка. Вместо sOther надо sLow в строке
sLowItog = sLow* proc

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 167
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет