【发布时间】:2016-06-08 03:46:08
【问题描述】:
大家好,我正在解决一个问题:
给定一个集合 S = {1, 2, 3, ... N}。从集合 S 中找到两个整数 A 和 B,其中 (A
样本输入1:5 2,(其中n = 5,k = 2)=>输出:1,
示例输入 2:8 5,(其中 n = 8,k = 5)=> 输出:4
我编写了代码,这似乎工作正常。但我正在寻找更优化的解决方案。我目前正在使用两个 while 循环,我不确定是否可以简化为一个 while 或 for 循环。以下是我的功能:
static void Main(String[] args)
{
string[] tokens_n = Console.ReadLine().Split(' ');
int n = Convert.ToInt32(tokens_n[0]);
int k = Convert.ToInt32(tokens_n[1]);
int i = 1, maxDiff = 0;
while (i < n)
{
int j = i + 1;
while (j <= n)
{
int diff = i & j;
if (diff < k)
{
if (diff > maxDiff)
{
maxDiff = diff;
}
}
j++;
}
i++;
}
Console.WriteLine(maxDiff);
}
我找到了一个解决方案here,但这个问题似乎是关于在列表中找到两个任意数字的最大差异,而我需要循环所有组合以找到按位与值然后进行比较。
【问题讨论】:
-
代码没问题。我会使用 For 循环而不是 while 循环。 For循环更容易理解,并且会减少代码行数。
标签: c# loops optimization bitwise-and