幸运号码程序未显示正确答案

Lucky Numbers Program not showing right answer

我正在使用普通数组制作一个幸运数字程序,这样列表中的其余数字就不会向前移动。我遵循的模式是 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,我认为是逻辑错误

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

问题出在您的这部分代码中:

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

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

这里,拿我为学校实践项目做的幸运数字代码:-

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]+"   ");
    }
  }
}