gpt4 book ai didi

java - Project Euler 24 使用 java 逻辑错误

转载 作者:行者123 更新时间:2023-11-30 08:07:10 26 4
gpt4 key购买 nike

我正在尝试解决问题 24 https://projecteuler.net/problem=24euler 项目的作者和我在这个问题上花了很多时间,但仍然没有成功。

但是现在不是问题,我想知道我的方法有什么问题。

我正在使用简单的排列来获取最左边的数字并从要找到的项中获取剩余值(通过减去,即使用模运算符)。

Java 代码:

import java.util.ArrayList;

public class LexOrder
{

public static int factorial(int num)
{
int res=1;
if(num <= 1)
return 1;

while(num > 1)
{
res *= num--;
}
return res;
}

public static ArrayList<Integer> addValue(int digit, ArrayList<Integer> al)
{
int temp=0, count=0;
while( count <= digit )
{
if( al.contains(count) )
temp++;
count++;
}

int val = digit+temp;

//checking weather the new number exists in the ArrayList or not.
while(true)
{
if(! al.contains(val) )
{
al.add(val);
break;
}
else
{
val++;
}
}
return al;
}

public static void main(String args[])
{
ArrayList<Integer> al = new ArrayList<Integer>();
int index = 999999;
int numOfDigit = 10;

if( factorial( numOfDigit ) > index && index >= 0)
{
System.out.println("Index Validated");
}
else
{
System.out.println("Index out of bounds");
System.exit(0);
}

int digit, count=1;
while( index !=0 )
{
digit = ( index / factorial( numOfDigit - count ) );
al = addValue(digit, al);

index = ( index % factorial( numOfDigit - count ) );

if(index == 0)
break;
count++;
}

// Adding value in ascending order.
int temp =0;
while( al.size() < numOfDigit )
{

if(!al.contains(temp))
al.add(temp);

temp++;
}

System.out.println(al);
}
}

输出:[2, 7, 8, 3, 9, 1, 4, 5, 6, 0]

输出应该是:2783915460

最佳答案

因此,在无法向您介绍确切数字的情况下,我可以判断出您管理数字的方式有问题:

int temp=0, count=0;    
while( count <= digit )
{
if( al.contains(count) )
temp++;
count++;
}

int val = digit+temp;

这种方法尤其无法检查某些数字(特别是 digitdigit+temp 之间的数字)是否已经在您的数组列表中。

我能够通过计算未使用的元素数量来修复它:

int val=0, count=0;
while( count < digit)
{ if( !al.contains(val++) )
count++;
}

关于java - Project Euler 24 使用 java 逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33858335/

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