javascript - 名为Powers的JS任务的解决问题 - 函数和数组
问题描述
我对名为Powers的简单任务有疑问,这是条件:
数字有力量!他们可以改变自己。一种转换是通过替换来完成的:
每个 0 - 与其相邻数字的绝对差
所有其他偶数 - 与其相邻数字的最大值
每个 1 - 与其相邻数字的总和
所有其他奇数 - 其相邻数中的最小值
最左边和最右边的数字是邻居。一个序列的K -sum 是序列经过K 次变换后的数字之和。你的任务是找到给定序列的K和
输入:输入数据作为参数给出 - 一个字符串数组。在第一个输入行将有数字N和K用空格分隔。在第二个输入行是N个数字 - 序列。
输出:输出应打印在控制台上。输出给定序列的K -sum
示例: 输入:5 1 9 0 2 4 1
解释: 9 0 2 4 1 变成 0 7 4 2 13
输出:26(0 7 4 2 13 的总和)
**这是我的代码:**
'use strict';
function slove(args) {
let k = Number(args[0].split(' ')[1]);
let numbers = args[1].split(' ').map(Number);
function transform(num, left, right) {
if (num === 0) {
return Math.abs(left - right);
} else if (num % 2 === 0) {
return Math.max(left, right);
} else if (num === 1) {
return left + right;
} else {
return Math.min(left, right);
}
}
for (let i = 0; i < k; i++) {
let currentTransformation = [];
for (let j = 0; j < numbers.lenght; j++) {
let nextValue;
if (j === 0) {
nextValue = transform(numbers[j], numbers[numbers.lenght - 1], numbers[1]);
} else if (j === numbers.lenght - 1) {
transform(numbers[j], numbers[j - 1], numbers[0]);
} else {
nextValue = transform(numbers[j], numbers[j - 1], numbers[j + 1]);
}
currentTransformation[j] = nextValue;
}
numbers = currentTransformation;
}
let sum = 0;
for (let num of numbers) {
sum += num;
}
console.log(sum);
}
slove([
'5 1',
'9 0 2 4 1'
]);
所以console.log(sum) 需要返回26,但它返回0...我找不到我的代码的问题在哪里。
解决方案
您的代码有两个问题:
- 你的数组长度有错别字——它的
length
,不是lenght
- 您忘记将最后一个值保存在
if (j === numbers.length - 1)
块中
'use strict';
function solve(args) {
let k = Number(args[0].split(' ')[1]);
let numbers = args[1].split(' ').map(Number);
function transform(num, left, right) {
if (num === 0) {
return Math.abs(left - right);
} else if (num % 2 === 0) {
return Math.max(left, right);
} else if (num === 1) {
return left + right;
} else {
return Math.min(left, right);
}
}
for (let i = 0; i < k; i++) {
let currentTransformation = [];
for (let j = 0; j < numbers.length; j++) {
let nextValue;
if (j === 0) {
nextValue = transform(numbers[j], numbers[numbers.length - 1], numbers[1]);
} else if (j === numbers.length - 1) {
nextValue = transform(numbers[j], numbers[j - 1], numbers[0]); // HERE
} else {
nextValue = transform(numbers[j], numbers[j - 1], numbers[j + 1]);
}
currentTransformation[j] = nextValue;
}
numbers = currentTransformation;
}
let sum = 0;
for (let num of numbers) {
sum += num;
}
console.log(sum);
}
solve([
'5 1',
'9 0 2 4 1',
]);
推荐阅读
- python - Java 网关进程在发送其端口号 Spark 之前退出
- python - 使用 python 获取响应正文的一部分
- jq - 在 jq 脚本中设置 `-R` 原始数据选项
- netlogo - 我们可以在 NetLogo 的 setup 和 go 过程中都包含一个过程(比如说检查 wind )吗?
- c# - Jaeger 服务:如何在 Google Kubernetes 上进行配置?
- java - 在javaFX中将DoubleBinding转换为double
- r - 从 df 中删除包含相同字符串的字符向量
- hadoop - 清除或删除 YARN (MR2) 应用程序队列
- mongodb - MongoDB 聚合 - 所有子对象的 elemMatch
- spring-boot - 动态注入没有注解的bean