我刚刚完成Project Euler(17)的编码,发现我的代码不正确。我找不到代码无法正常工作的地方。输出一个数字,但在检查答案是什么之后,它太高了。我找不到我搞砸了代码的地方。我很感激帮助。
public class Euler17
{
public static void main(String[] args)
{
int total = 0;
for(int i = 1; i <= 1000; i++ )
{
total += letters(i);
System.out.println(i + " " + letters(i));
}
System.out.print(total);
}
public static int letters(int i)
{
if(i >= 1 && i <= 99)
{
return tens(i);
}
if(i % 100 == 0 && i != 1000)
{
return (tens(i / 100) + 7);
}
if(i != 1000)
{
return hundreds(i);
}
if(i == 1000)
{
return 11;
}
else
{
return - 1;
}
}
public static int hundreds(int i)
{
int h;
int t;
t = i % 100;
h = (i - t) / 100;
return ones(h) + 10 + tens(t);
}
public static int tens(int i)
{
// int t = 0;
int o;
o = i % 10;
// t = (i - o) / 10;
// find value of i and split into tens and ones
switch(i)
{
case 1:
return 3;
case 2:
return 3;
case 3:
return 5;
case 4:
return 4;
case 5:
return 4;
case 6:
return 3;
case 7:
return 5;
case 8:
return 5;
case 9:
return 4;
case 10:
return 3;
case 11:
return 6;
case 12:
return 6;
case 13:
return 8;
case 14:
return 8;
case 15:
return 7;
case 16:
return 7;
case 17:
return 9;
case 18:
return 8;
case 19:
return 8;
}
if(i >= 20 && i <= 29)
{
return 6 + ones(o);
}
if(i >= 30 && i <= 39)
{
return 6 + ones(o);
}
if(i >= 40 && i <= 49)
{
return 6 + ones(o);
}
if(i >= 50 && i <= 59)
{
return 5 + ones(o);
}
if(i >= 60 && i <= 69)
{
return 5 + ones(o);
}
if(i >= 70 && i <= 79)
{
return 7 + ones(o);
}
if(i >= 80 && i <= 89)
{
return 6 + ones(o);
}
if(i >= 90 && i <= 99)
{
return 6 + ones(o);
}
return i;
}
public static int ones(int i)
{
switch(i)
{
case 1:
return 3;
case 2:
return 3;
case 3:
return 5;
case 4:
return 4;
case 5:
return 4;
case 6:
return 3;
case 7:
return 5;
case 8:
return 5;
case 9:
return 4;
case 0:
return 0;
}
return i;
}
}
答案 0 :(得分:1)
if(i >= 40 && i <= 49)
{
return 6 + ones(o);
}
它拼写四十,而不是十四。在这里使用5而不是6。