我正在使用普通数组制作一个幸运数字程序,以便列表中的其余数字不会向前移动。我所遵循的模式是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.我认为这是一个逻辑错误。
答案 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]+" ");
}
}
}