幸运数字计划没有显示正确答案

时间:2015-01-03 12:32:25

标签: java arrays

我正在使用普通数组制作一个幸运数字程序,以便列表中的其余数字不会向前移动。我所遵循的模式是1,3,7,9,13,15,21,25,31,33,37,43,49,51,63,67,69,73,75,79,87,93 ,99,...更多信息:Lucky Numbers

这是我制作的节目:

public class LuckyNumbers {

public static void main(String[] args) {
    int[] lucky = new int[101];

    for (int a = 0; a < lucky.length; a++){
        lucky[a] = a;
    }
    //goes through each element in list
    for (int b = 2; b < lucky.length; b++){
        //checks if number is surviving
        if (lucky[b] != 0){
            /*  if it does survive, go through the list deleting elements
             *  (setting them to zero) that fall on the 
             *  index of the multiples of the the surviving number*/
            int luckyNum = lucky[b]; // so that the number doesn't change
            for (int c = 1; c < lucky.length;c++){
                int d = luckyNum * c;
                if (d < lucky.length){
                    lucky[d] = 0;
                    continue;
                }
            }
        }
    }

    for (int f = 0; f < lucky.length; f++){
        if (lucky[f] != 0){
            System.out.println(lucky[f]);
        }
    }
}   
}

输出为1.我认为这是一个逻辑错误。

3 个答案:

答案 0 :(得分:1)

问题在于您的代码的这一部分:

for (int c = 1; c < lucky.length;c++){
   int d = luckyNum * c;
   if (d < lucky.length){
     lucky[d] = 0;
     continue;
   }
}

当您查看维基页面时,您必须删除每个第c个幸存的号码。你正在消除每一个倍数。因此,对于数字3,您应该消除5, 11, 17 ...而不是3, 6, 9...现在正在做的事情。

答案 1 :(得分:0)

第17至23行不消除第N个剩余数字。您假设剩余的数字在幸运数字数组中是连续的,但它们不是。您必须扫描/跟踪第N个剩余数字才能将其删除。它需要更多逻辑,或者找到另一种使这项任务更容易管理的数据结构。

答案 2 :(得分:0)

在这里,把我的代码用于我为学校实际项目所做的幸运数字: -

import java.io.*;
class LuckyNumbers
{
  public static void main(String args[])throws IOException
  {
    BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
    System.out.print("Enter the Number of Elements : ");
    int n=Integer.parseInt(br.readLine());

    int a[]=new int[n];
    int c=n;

    for(int i=0;i<n;i++)
    {
        a[i]=i+1;
    }

    int del=1;
    System.out.println("\nLucky Number Operation :\n");

    while(del<n)
    {
        for(int i=del; i<n; i+=del)
        {
            for(int j=i; j<n-1; j++)
            {
                a[j]=a[j+1];
            }
            n--;
        }
        del++;

        for(int i=0; i<n; i++)
        {
            System.out.print(a[i]+"   ");
        }
        System.out.println();
    } //end of while

    System.out.print("\nHence, the Lucky Numbers Less than "+c+" are : ");
    for(int i=0; i<n; i++)
    {
        System.out.print(a[i]+"   ");
    }
  }
}