我正在开发一个修改过的Mastermind游戏,我需要比较猜测和代码数组,并计算正确位数的数量。
它会一直工作,直到代码数组中有重复的数字。我知道这与第二个for循环和从正确的数字中减去有关。有没有办法只用循环和基本知识来修复它?
public static int getCorrectDigits(int[] code, int[] guess) {
if (code.length != guess.length) {
throw new IllegalArgumentException("Different lengths");
}
int correctDigits = 0;
for (int i = 0; i < code.length; i++) {
for (int j = 0; j < guess.length; j++) {
if (guess[j] == code[i]) {
correctDigits++;
break;
}
}
}
for (int i = 0; i < code.length; i++) {
for (int j = i + 1; j < code.length; j++) {
if (code[i] == code[j] && code[i] != guess[j] && code[j] != guess[i]) {
correctDigits--;
}
}
}
return correctDigits;
}
Code - 5 9 9 9
Guess - 0 9 9 9
Passes - 3
Code - 5 9 9 9
Guess - 9 9 0 0
Passes - 2
Code - 5 9 9 9
Guess - 0 0 9 9
Fails - 3 (should be 2)
Code - 5 9 9 9
Guess - 9 0 0 0
Fails - 0 (should be 1)
您可以从这些数组生成两个 Map,这些数组将值与其出现次数相关联。
然后迭代从< code>code数组获得的映射条目,并将其值与基于< code>guess数组创建的映射中的相应值进行比较。这将允许确定正确/错误猜测的数量。
既然你提到了“只使用循环和基础知识”,我想这里不包括像地图这样的概念,“基础知识”指的是“数组”。
如果您需要知道的是位数,请尝试将输入转换为10个元素的计数数组,即每个数字都是输入。
示例:
int[] codeDigits = new int[10];
for (int i = 0; i < code.length; i++) {
codeDigits[code[i]]++;
}
这将把[5,9,9,9]
变成[0,0,0,0,0,1,0,3]
,即5:1x,9:3x
现在同样进行猜测,例如< code>[0,0,9,9]变成< code>[2,0,0,0,0,0,0,2]。
现在你所要做的就是计算位数:
int counter = 0;
for( int i = 0; i < codeDigits.length; i++ ) {
if( codeDigits[i] >= guessDigits[i] ) {
counter += guessDigits[i]; //guessed the exact number or less -> use the guess
} else {
counter += codeDigits[i]; //guessed more -> use the code
}
}
如果您能够使用Math
函数,那么循环体可以替换为counter=Math。min(代码数字[i],guessDigits[i])
。
有几种解决方案。其中之一是索引代码数组的重复值,然后在第一个循环中检查它们(并删除第二个循环):
int correctDigits = 0;
int[] duplicateIndexes = new int[code.length];
for (int i=0; i < code.length; i++) {
if( duplicateIndexes[i] == 1) continue;
for (int j=0; j < code.length; j++) {
if( core[i] == core[j]) {
duplicateIndexes[j] == 1;
continue;
}
}
}
for (int i = 0; i < code.length; i++) {
if (duplicatedIndexes[i] == 1) continue;
for (int j = 0; j < guess.length; j++) {
if (guess[j] == code[i]) {
correctDigits++;
break;
}
}
}
我需要一个函数来接收arrayList并返回一个新的arrayList,其中包含大小相同的整数。His元素将表示原始数组中索引i中的值的重复序列数(外观数)。 1单个外观也将被视为一个序列。例如:arr[1,1,0,1]- 输入:它不必是排序数组 函数示例: arr[3,0,1,2,1,1,1,3]▪×输入:(arr)▪×输出:newArray[2,1,2,1,2,2,2,2]因为'3'在序列中出
问题内容: 我想计算数组中每个重复项的出现,最后得到一个唯一的/非重复项及其各自出现的数组。 这是我的代码;但是我没有错! 问题答案: , 请享用 :-) 结果:
在JavaScript中,我生成了一个x个数组,所有数组由57个数字组成。我想计算数组中每个数字的平均值,作为一个数组的平均值,即: array1[0]array2[0]array3[0]…./阵列数=[0]的平均值 array1[1]阵列2[1]阵列3[1]…./阵列数=[1]的平均值 数组一数组二数组三数组二..../数组数量=平均值[2] 这是生成的数组数组的示例: 谁能给我一个例子,让我可
本文向大家介绍PHP程序计算两个数字的重复减法,包括了PHP程序计算两个数字的重复减法的使用技巧和注意事项,需要的朋友参考一下 要计算两个数字的重复减法,代码如下- 示例 输出结果 定义了一个名为“ repeated_sub”的函数,该函数检查两个值是否完全相除,如果为真,则将数字相除并给出商的下限值。否则,它将给出商的下限值和通过对第二个值调用'repeated_sub'函数而计算出的值,以及在
问题内容: 我有一个数组如下 预期结果 尝试如下 问题答案: 无需使用jQuery即可完成此任务-此示例将构建一个对象,其中包含数组中每个不同元素的出现次数
问题是== 将nums1和nums2合并到一个按非递减顺序排序的数组中。 最终排序的数组不应由函数返回,而应存储在数组 nums1 中。为了适应这种情况,nums1 的长度为 m n,其中前 m 个元素表示应合并的元素,最后 n 个元素设置为 0 并应忽略。nums2 的长度为 n。 我的代码中有什么错误??? 您的意见 我的产出 预期产出