二次线性C#

二次线性C#,c#,C#,考虑一个序列u,其中u的定义如下: 数字u(0)=1是u中的第一个。 对于u中的每个x,y=2*x+1和z=3*x+1也必须在u中。 在美国没有其他数字。 例:u=[1,3,4,7,9,10,13,15,19,21,22,27,] 1给3和4,然后3给7和10,4给9和13,然后7给15和22,依此类推 例如: 测试(10)应返回22 我已经编写了几个版本的代码,但我无法通过所有测试。你认为这可能与什么有关 public int test(int n) { List<int>

考虑一个序列u,其中u的定义如下:

数字u(0)=1是u中的第一个。 对于u中的每个x,y=2*x+1和z=3*x+1也必须在u中。 在美国没有其他数字。 例:u=[1,3,4,7,9,10,13,15,19,21,22,27,]

1给3和4,然后3给7和10,4给9和13,然后7给15和22,依此类推

例如: 测试(10)应返回22

我已经编写了几个版本的代码,但我无法通过所有测试。你认为这可能与什么有关

public int test(int n)
{
    List<int> result = new List<int>(new int[] { 1 });
    List<int> arr = new List<int>(new int[] { 1 });
    List<int> arr2 = new List<int>();
    int i = 0;
    while (Math.Pow(2, i++) < n)
    {
        arr2.Clear();
        arr2.AddRange(arr.Select(s => 2 * s + 1));
        arr2.AddRange(arr.Select(s => 3 * s + 1));
        arr.Clear();
        arr.AddRange(arr2.Distinct());
        result.AddRange(arr.OrderBy(s=>s));

    }
    return result.Distinct().OrderBy(s => s).ToList()[n];
}
公共整数测试(整数n)
{
列表结果=新列表(新int[]{1});
List arr=新列表(新int[]{1});
List arr2=新列表();
int i=0;
while(Math.Pow(2,i++)2*s+1));
arr2.AddRange(arr.Select(s=>3*s+1));
arr.Clear();
arr.AddRange(arr2.Distinct());
AddRange(arr.OrderBy(s=>s));
}
返回result.Distinct().OrderBy(s=>s.ToList()[n];
}

我对某人完成的代码不感兴趣,我感兴趣的是为什么会出现错误,以及如何使用我的方法获得正确的解决方案。

您可以通过以下方式使用IEnumerable:

私有静态IEnumerable seq(){
var pending=新列表();
var buffer=新列表();
缓冲区。添加(1);
待决。添加(1);
while(true){
var batch=新列表();
foreach(buffer.Distinct()中的变量n)
{
批量添加(2*n+1);
批量添加(3*n+1);
}
buffer.Clear();
var batchMin=batch.Min();
var readyToReturn=pending
.其中(x=>x)
.ToList();
如果(readyToReturn.Count>0){
foreach(readyToReturn中的变量x)
收益率x;
pending.RemoveAll(x=>readyToReturn.Contains(x));
batch.RemoveAll(x=>readyToReturn.Contains(x));
}
待定。添加范围(批次);
buffer.AddRange(批处理);
}
}
然后你可以打电话:

var result=seq().Skip(n).First();
我得到了这些结果:

OK    n: 0 expected: 1 got: 1
OK    n: 1 expected: 3 got: 3
OK    n: 2 expected: 4 got: 4
OK    n: 3 expected: 7 got: 7
OK    n: 4 expected: 9 got: 9
OK    n: 5 expected: 10 got: 10
OK    n: 6 expected: 13 got: 13
OK    n: 7 expected: 15 got: 15
OK    n: 8 expected: 19 got: 19
OK    n: 9 expected: 21 got: 21
OK    n: 10 expected: 22 got: 22
OK    n: 11 expected: 27 got: 27
OK    n: 20 expected: 57 got: 57
OK    n: 30 expected: 91 got: 91
OK    n: 50 expected: 175 got: 175

它没有通过什么测试?根据您的代码,测试(10)返回预期的22。您可以分享一下哪个测试用例没有通过。我正在尝试在完成任务,不幸的是我不能给您一个测试,只有这个:测试失败预期:335031但was:335187测试失败预期:3355但was:3358
3355
测试(575)
的结果。当您只需要一个(
result
)时,您正在使用3
List
。循环是
inti=0;而(n>i){…i+=1;}
。在不需要调用时,您使用了两个
Select()
调用。您只需返回
结果[n]
。。。。如果需要不同的数字,则
3355
测试(500)的结果。其他条件都是一样的。测试失败了:57,但我知道是:55(样本测试:10->2220->5730->9150->175)。让我查一查。