Javascript - задача тръби
Здравейте,
Задачата ми гърми в Judge мисля, че заради закръглението до цели числа.
При първия тест ми дава отговор 54 за втора тръба, а VS код смята 55.
Ако може някой да удари един поглед.
function pipes([arg1, arg2, arg3, arg4]) {
let V = Number(arg1);
let P1 = Number(arg2);
let P2 = Number(arg3);
let H = Number(arg4);
let fillingInLitres = H * (P1 + P2);
let fillingPercent = fillingInLitres / V;
let overflow = fillingInLitres - V;
let p1Share = (P1 * H) / fillingInLitres;
let p2Share = (P2 * H) / fillingInLitres;
if (fillingInLitres <= V) {
console.log(`The pool is ${(fillingPercent * 100).toFixed(0)}% full. Pipe 1: ${(p1Share * 100).toFixed(0)}%. Pipe 2: ${(p2Share * 100).toFixed(0)}%.`);
} else {
console.log(`For ${H} hours the pool overflows with ${overflow.toFixed(1)} liters.`);
}
}
Здравей,
исках да ти дам готово решение, но не знам дали ще имам време.
Не знам условието, но предполагам има някаква грешка в judge.
Това което е на входа е масив от стрингове, като този който те интересува е първият, тоест:
Така поне няма да преобразуваш стрингове :)
Здравей,
Проблемът беше със закръгленията, оправих го и изкара 100/100.
Благодаря все пак.
Според мен решаваме различни задачи. Само за протокола: аз решавам тази задача. Така и не можах без условие да мина 93%.
P.S. Така и не разбрах условието, но докарах judge до 100.
Quake3 :
това оправя проблема с закръглянето, но гледам, че и ти измисли начин
Същата е. Ето го решението ми 100/100, но както казах по-горе, не бих решавал задача така.
А Math.round не съм тествал дали решава проблемите, но в условието изрично е написано да не се закръглява.
function pipes([arg1, arg2, arg3, arg4]) {
let V = Number(arg1);
let P1 = Number(arg2);
let P2 = Number(arg3);
let H = Number(arg4);
let fillingInLitres = H * (P1 + P2);
let fillingPercent = fillingInLitres / V * 100;
let overflow = fillingInLitres - V;
if (fillingPercent < 100) {
fillingPercent = String(fillingPercent).slice(0,2);
} else {
fillingPercent = String(fillingPercent).slice(0,3);
}
let p1Share = (P1 * H) / fillingInLitres * 100;
let p2Share = (P2 * H) / fillingInLitres * 100;
if (p1Share == 0) {
p1Share = String(p1Share).slice(0,2);
p2Share = String(p2Share).slice(0,3);
} else if (p2Share == 0) {
p1Share = String(p1Share).slice(0,3);
p2Share = String(p2Share).slice(0,2);
} else {
p1Share = String(p1Share).slice(0,2);
p2Share = String(p2Share).slice(0,2);
}
if (fillingInLitres <= V) {
console.log(`The pool is ${fillingPercent}% full. Pipe 1: ${p1Share}%. Pipe 2: ${p2Share}%.`);
} else {
console.log(`For ${H} hours the pool overflows with ${overflow} liters.`);
}
}
Задачата, като задача е една и съща, но според мен ги пускате в различни инстанции в judge, в смисъл твоето решение не минава и обратно, на двете места ми се струва, че входовете се подават по различен начин, а и закръглянето е различно, струва ми се че твоето е актуално, а ние с quake сме я решавали в някаква стара инстанция.
Не са нужни закръгляния, където се иска цяло число може да използваш - parseInt, където се иска число с пляваща запетая(при часовете) - parseFloat.
В твоя случай:
let p1Share = parseInt((P1 * H) / fillingInLitres * 100);
let p2Share = parseInt((P2 * H) / fillingInLitres * 100);