gpt4 book ai didi

java - 制作一个基本算法——更有趣的版本

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:17:22 25 4
gpt4 key购买 nike

查看 "Making a basic algorithm" 的编辑历史.当 OP 改变问题,使一些有趣的答案无效时,受访者明显感到失望。所以,我想,为什么不再问原来的问题,让那些答案站得住脚。

So basically I want to find a easier way to do this:

if(size == 2)  unit /= 2;
if(size == 2 || size == 6) unit /= 2;
if(size == 2 || size == 6 || size == 10) unit /= 2;

So basically it checking if size is equal to 2 and then every new line it add 4 to the last size check.

I need to go up to 256.

I want to know if there a easy way of doing this.

最佳答案

此处检查数字是否相等的基本标准是 size / 4 的剩余部分是 2。这可以使用模运算符 % 检测到:

size % 4 == 2

然后就是分多少次的问题unit 2. 对于上面的例子:

  • 对于 size == 2 , unit /= 8 (符合所有 3 个条件);
  • 对于 size == 6 , unit /= 4 (匹配第二个 2 个条件);
  • 对于 size == 10 , unit /= 2 (匹配最后一个条件)。

所以数字越小被8除的次数越多。如果最大size检查是 10,unit除以 2 ^ (1 + (10 - size) / 4) .这可以使用右移运算符简洁地表达:

unit >>= 1 + (10 - size) / 4

或者,更一般地说:

unit >>= 1 + (max_number - size) / 4

哪里max_number % 4 == 2 .

设置max_number = 254 (问题中指定了 256,但不会出现在表达式中;最后检查的数字是 254),并指出我们仅在 2 <= size <= 254 时才应用它,我们可以将最终答案表示为:

if (size % 4 == 2 && size >= 2 && size <= 254) {
unit >>= 1 + (254 - size) / 4;
}

实际上,条件可以更简洁地表达(但无疑可读性较差):

if ((size & 0xffffff03) == 2)

正如@PaulBoddington 所指出的,需要注意右移的大小:如果单位是 int并且移动的位数大于 31,则 unit应该简单地设置为零。

关于java - 制作一个基本算法——更有趣的版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36606672/

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