幸运号码程序未显示正确答案
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]+" ");
}
}
}
我正在使用普通数组制作一个幸运数字程序,这样列表中的其余数字就不会向前移动。我遵循的模式是 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]+" ");
}
}
}