C解法
更新中
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
JS解法
第一行输入是四个整数 a、b、c 和 d,其中: a:满减券数量,每个满减券能减10元,最大能减 a 次。 b:打折券数量,最多使用 b 次,每次可以打9折。 c:无门槛5元券数量,最多使用 c 次,每次减少5元。 d:商品的数量,接下来会有 d 个商品的价格。 接下来的 d 行输入每个商品的价格。 计算商品的最小花费:
对于每个商品的价格,尝试不同的优惠组合,计算最小的花费: 使用满减券后再使用打折券、无门槛券。 使用打折券后再使用满减券、无门槛券。 使用无门槛券后再使用满减券、打折券。 通过不同的优惠顺序,找到每个商品的最优花费和使用的优惠券数。 输出:
对每个商品,输出最小花费和所使用的优惠券数量。
const readline = require ( "readline" ) ;
const rl = readline. createInterface ( {
input : process. stdin,
output : process. stdout,
} ) ;
const data = [ ] ;
let a, b, c, d;
rl. on ( "line" , ( line ) => {
data. push ( line) ;
if ( data. length === 1 ) {
[ a, b, c] = data[ 0 ] . split ( " " ) . map ( Number) ;
}
if ( data. length === 2 ) {
d = parseInt ( data[ 1 ] ) ;
}
if ( d && data. length === d + 2 ) {
data. shift ( ) ;
data. shift ( ) ;
const prices = data. map ( Number) ;
getRes ( prices, a, b, c) ;
data. length = 0 ;
}
} ) ;
function getRes ( prices, a, b, c ) {
for ( let p of prices) {
const res = [ ] ;
const m1 = useM ( p, a) ;
const mn1 = useN ( m1[ 0 ] , b) ;
res. push ( [ mn1[ 0 ] , a + b - ( m1[ 1 ] + mn1[ 1 ] ) ] ) ;
const mk1 = useK ( m1[ 0 ] , c) ;
res. push ( [ mk1[ 0 ] , a + c - ( m1[ 1 ] + mk1[ 1 ] ) ] ) ;
const n1 = useN ( p, b) ;
const nm1 = useM ( n1[ 0 ] , a) ;
res. push ( [ nm1[ 0 ] , b + a - ( n1[ 1 ] + nm1[ 1 ] ) ] ) ;
const nk1 = useK ( n1[ 0 ] , c) ;
res. push ( [ nk1[ 0 ] , b + c - ( n1[ 1 ] + nk1[ 1 ] ) ] ) ;
res. sort ( ( x, y ) => ( x[ 0 ] === y[ 0 ] ? x[ 1 ] - y[ 1 ] : x[ 0 ] - y[ 0 ] ) ) ;
console. log ( res[ 0 ] . join ( " " ) ) ;
}
}
function useM ( p, a ) {
const cnt = Math. floor ( p / 100 ) ;
const used = Math. min ( a, cnt) ;
p -= used * 10 ;
a -= used;
return [ p, a] ;
}
function useN ( p, b ) {
if ( b >= 1 ) {
p = Math. floor ( p * 0.92 ) ;
}
return [ p, b - 1 ] ;
}
function useK ( p, c ) {
while ( p > 0 && c > 0 ) {
p -= 5 ;
p = Math. max ( p, 0 ) ;
c-- ;
}
return [ p, c] ;
}
class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}">
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
注意:
如果发现代码有用例覆盖不到的情况,欢迎反馈!会在第一时间修正,更新。 解题不易,如对您有帮助,欢迎点赞/收藏
评论记录:
回复评论: