public static void main(String[] args)
{
PrintMagic(1);
}
public static void PrintMagic(int n)
{
int count = 1;
int[] array = new int[n];
int magic = 0;
while(count<=n)
{
for(int i = 0; i <= count; i++)
{
magic += i;
if(Math.sqrt(magic) == ((int)Math.sqrt(magic)))
{
array[i] = magic;
count++;
}
}
}
for(int i = 0; i<array.length; i++)
{
System.out.println(array[i]);
}
}
该程序应该打印n个幻方(一个具有整数平方根的数字,并且是连续数字的总和。) 恩。 36的平方根为6且1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 = 36
我在主函数中传递方法数字3,但是我被困在一个循环中(糖果手杖看着蓝色的J吧)
我有没有看到的东西?
答案 0 :(得分:1)
你的问题陈述是测试每个连续的和是否是一个完美的正方形(1 + 2 + .. + n是一个完美的正方形)。所以你基本上想要的是:if(Math.sqrt(n*(n+1)/2) == ((int)Math.sqrt(n*(n+1)/2)))
。 You can refer to the answer by a.yekimov。他纠正了你的代码,你可以注意到魔法只不过是n个连续整数的总和。
在你的代码中:
public static void main(String[] args)
{
PrintMagic(1);
}
public static void PrintMagic(int n){
int count = 1;// array index start from 0 in java
int[] array = new int[n];
int magic = 0;
while(count<=n){/*since array index starts from zero, equals is to be
removed*/
for(int i = 0; i <= count; i++){/*the loop termination should be at
count<n not i<=count*/
magic += i;
if(Math.sqrt(magic) == ((int)Math.sqrt(magic))){
array[i] = magic;
count++;
}
}
}
for(int i = 0; i<array.length; i++)
{
System.out.println(array[i]);
}
}
您还可以尝试:
public static void main(String[] args)
{
PrintMagic(3);
}
public static void PrintMagic(int n)
{
int count = 0;
int[] array = new int[n];
int magic = 0;
int i = 0;
while(count<n){
magic += i;
if(Math.sqrt(magic) == ((int)Math.sqrt(magic))){
array[count] = magic;
count++;
}
i++;
}
for(i = 0; i<array.length; i++){
System.out.println(array[i]);
}
}
答案 1 :(得分:0)
试试这个:
public static void PrintMagic(int n)
{
int count = 0;
int[] array = new int[n];
int magic = 0;
for(int i = 0; count < n; i++)
{
magic += i;
if(Math.sqrt(magic) == ((int)Math.sqrt(magic)))
{
array[count] = magic;
count++;
}
}
for(int i = 0; i<array.length; i++)
{
System.out.println(array[i]);
}
}