常用输入
readline()
读取一整行内容,并且为字符串类型
parseInt()
转数字,但是如parseInt("1 2 3 4")
输出1,仅输出第一个
例子
单行数字输入直接let xx = parseInt(readline())
,输出console.log()
多行数字输入一般使用如下封装函数,while(1)循环读取,遇到结束符跳出,将读到的值作为参数传入函数。readline()一行一行地读取,如果一行多个数字(如1 2 3空格隔开):let arr =readline().split(" ").map(Number)
此时arr为[1,2,3]数字数组
while(1){
if(...)break;
let xx = readline()...;
console.log(fun(xx))
};
function fun(xx){...}
斐波那契数列
let N = parseInt(readline())
function feibonaqie(N) {
if(N===1||N===0){
return 1
}else{
let dp = []
dp[0]=1; dp[1]=1;
for(let i=2; i<N+1; i++){
dp[i] = dp[i-1]+dp[i-2]
}
return dp[N]
}
}
console.log(feibonaqie(N))
代金券组合
while(1){
// readline()出来是字符串
let total = parseInt(readline()) //读第一行 65
if(total==0){
break
}else{
// 读第二行,parseInt("1 2 3")只能识别第一个1
let lineArr = readline().split(" ").map(Number) // 转数字数组
let num = lineArr[0];
let arr = lineArr.slice(1) // 取出第一个以后地所有数字
// console.log(total,num,arr)
console.log(minCount(total,num,arr));
}
}
// total是商品的价格,num是有多少种代金券,arr代金券面额number数组
function minCount(total,num,arr) {
let dp = Array(total+1).fill(1001); // dp数组索引表示价格,值表示最少优惠券数量
dp[0] = 0
for(let i=1; i<total+1; i++){ // 从头开始遍历每一个价格
for(let j=0; j<arr.length; j++){ // 遍历每一张代金券
if(i-arr[j]>=0){
dp[i] = Math.min(dp[i],dp[i-arr[j]]+1)
}
}
}
if(dp[total] === 1001){
return "Impossible"
}else return dp[total]
}