gpt4 book ai didi

java - 用于猜测姓名字母的算法不会显示某些字母并卡在(I 和 R)之间。我怎样才能改进我的算法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:28:32 24 4
gpt4 key购买 nike

该算法假设询问英文字母表的中间字母,在我的程序中是N。此时它询问用户是否:

  1. 猜测正确

  2. 这封信在字母表中排在前面。

  3. 该字母在字母表中靠后

当试图猜测Jose时,它会首先询问N。我选择选项 2,然后它会给我 G。然后我选择选项 3,它会给我 Q。然后我选择选项 2,它会给我 I。然后我选择选项 3,它会给我 R。如果我选择选项 2,它会再次给我 R,基本上我被困在 RI 之间。如何修复我的算法以正确提供所有可用的字母?

我的代码如下:

int let = 26/2;
if(n != 0) {
//Correct guess
if(n == 3) {
aLetter = alphabet[let];
actualLetter = Character.toString(aLetter);
aName.add(actualLetter);
}
//earlier in alphabetical order
else if(n == 2) {
let /= 2;
}
//later in alphabetical order
else if(n == 1) {
for(int i = let; i < 27; i++){
r += 1;
}
r /= 2;
let += r;
r=0;
}

} //done guessing
else if (n == 0) {
for(String str: aName) {
result3 += str;
}
}

任何帮助和/或建议都会很棒。谢谢!

最佳答案

问题1

假设被猜的字母表中的字母(用---等表示)是“s”(用+表示)。计算机会先猜中间(let = 13,用|表示)。

-------------|---+--------

你告诉计算机猜得更高。

代码

for(int i = let; i < 27; i++) {
r += 1;
}
r /= 2;
let += r;
r=0;

可以缩短为

let += (26 - let) / 2;

计算机会猜到一半(let = 19):

-------------|---+-|------

到目前为止一切顺利。

现在,您告诉它猜得更低。计算机知道它高于 13 且低于 19,因此它应该在两者之间进行猜测。但是,您拥有的代码不会这样做。

let /= 2;

使 let 成为 (int)(19/2),即 9。

---------|---|---+-|------

你想要的是 let = 16

-------------|--|-+|------

问题2

假设你成功地做到了

-------------|--|-+|------

最近的猜测是 16。你告诉计算机猜测更高。附上代码

let += (26 - let) / 2;

let 将变为 21。

-------------|--|-+|-|----

你想要的是 let = 18 or 19;

解决方案

一般来说,一个好的算法应该让 let 在每次迭代中增加或减少“13/2n”,其中“n”是迭代次数(开始在 0)。

因此您应该使用代码

int let = 0;
int iteration = 0;

//start loop
//take input

int delta = 13 / Math.pow(2, iteration) + 1;

if(n != 0) {
//if n == 3
else if(n == 2)
{
let -= delta;
}
else if(n == 1)
{
let += delta;
}
}
iteration++;
//end loop

并将注释替换为您已经在使用的代码。

关于java - 用于猜测姓名字母的算法不会显示某些字母并卡在(I 和 R)之间。我怎样才能改进我的算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21149149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com