如何在回溯器(java)中实现这一点?
我制作了一个小java程序。一个整数将是一个输入,然后随机数将被打印到控制台,直到我们找到那个整数输入。 代码会有点作弊,因为它知道输入的数字有多少位 将使用随机数,我要做的是排除所有已使用的随机数。但我不知道该怎么做。嗯,我有一个想法,但这将是一个廉价的旁路,我不喜欢。它将从0开始,一直增加1,直到我们找到输入 这个(排除使用过的随机数)可以在java中完成吗如何在回溯器(java)中实现这一点?,java,list,caching,random,Java,List,Caching,Random,我制作了一个小java程序。一个整数将是一个输入,然后随机数将被打印到控制台,直到我们找到那个整数输入。 代码会有点作弊,因为它知道输入的数字有多少位 将使用随机数,我要做的是排除所有已使用的随机数。但我不知道该怎么做。嗯,我有一个想法,但这将是一个廉价的旁路,我不喜欢。它将从0开始,一直增加1,直到我们找到输入 这个(排除使用过的随机数)可以在java中完成吗 import java.util.Scanner; import java.util.Random; public class Ba
import java.util.Scanner;
import java.util.Random;
public class Backtracker{
public static void main(String[]args){
int counter = 0;
Scanner input = new Scanner(System.in);
System.out.println("Enter integer here: ");
int x = input.nextInt();
Random rand = new Random();
int a = rand.nextInt(100)+0;
int b = rand.nextInt(1000)+100;
int c = rand.nextInt(10000)+1000;
int d = rand.nextInt(100000)+10000;
int e = rand.nextInt(1000000)+10000;
int f = rand.nextInt(10000000)+1000000;
int g = rand.nextInt(100000000)+10000000;
if(x<=100){
while(x != a){
a = rand.nextInt(100)+0;
System.out.println(a);
counter++;
}
System.out.println("Tries: "+counter);
}
else if(x<=1000){
while(x != b){
b = rand.nextInt(1000)+100;
System.out.println(b);
counter++;
}
System.out.println("Tries: "+counter);
}
else if(x<=10000){
while(x != c){
c = rand.nextInt(10000)+1000;
System.out.println(c);
counter++;
}
System.out.println("Tries: "+counter);
}
else if(x<=100000){
while(x != d){
d = rand.nextInt(100000)+10000;
System.out.println(d);
counter++;
}
System.out.println("Tries: "+counter);
}
else if(x<=1000000){
while(x != e){
e = rand.nextInt(1000000)+100000;
System.out.println(e);
counter++;
}
System.out.println("Tries: "+counter);
}
else if(x<=10000000){
while(x != f){
f = rand.nextInt(10000000)+1000000;
System.out.println(f);
counter++;
}
System.out.println("Tries: "+counter);
}
else if(x<=100000000){
while(x != g){
g = rand.nextInt(100000000)+10000000;
System.out.println(g);
counter++;
}
System.out.println("Tries: "+counter);
}
}
}
我想我们可以做一个列表,这样每个使用过的号码都会在这个列表中。在每个循环中,访问列表以检查编号是否未使用。但这只是想象,在java中真的有可能吗
import java.util.Scanner;
import java.util.Random;
public class Backtracker{
public static void main(String[]args){
int counter = 0;
Scanner input = new Scanner(System.in);
System.out.println("Enter integer here: ");
int x = input.nextInt();
Random rand = new Random();
int a = rand.nextInt(100)+0;
int b = rand.nextInt(1000)+100;
int c = rand.nextInt(10000)+1000;
int d = rand.nextInt(100000)+10000;
int e = rand.nextInt(1000000)+10000;
int f = rand.nextInt(10000000)+1000000;
int g = rand.nextInt(100000000)+10000000;
if(x<=100){
while(x != a){
a = rand.nextInt(100)+0;
System.out.println(a);
counter++;
}
System.out.println("Tries: "+counter);
}
else if(x<=1000){
while(x != b){
b = rand.nextInt(1000)+100;
System.out.println(b);
counter++;
}
System.out.println("Tries: "+counter);
}
else if(x<=10000){
while(x != c){
c = rand.nextInt(10000)+1000;
System.out.println(c);
counter++;
}
System.out.println("Tries: "+counter);
}
else if(x<=100000){
while(x != d){
d = rand.nextInt(100000)+10000;
System.out.println(d);
counter++;
}
System.out.println("Tries: "+counter);
}
else if(x<=1000000){
while(x != e){
e = rand.nextInt(1000000)+100000;
System.out.println(e);
counter++;
}
System.out.println("Tries: "+counter);
}
else if(x<=10000000){
while(x != f){
f = rand.nextInt(10000000)+1000000;
System.out.println(f);
counter++;
}
System.out.println("Tries: "+counter);
}
else if(x<=100000000){
while(x != g){
g = rand.nextInt(100000000)+10000000;
System.out.println(g);
counter++;
}
System.out.println("Tries: "+counter);
}
}
}
import java.util.Scanner;
导入java.util.Random;
公共类回溯程序{
公共静态void main(字符串[]args){
int计数器=0;
扫描仪输入=新扫描仪(System.in);
System.out.println(“在此处输入整数:”);
int x=input.nextInt();
Random rand=新的Random();
INTA=兰特·耐克斯汀(100)+0;
int b=兰特(1000)+100;
int c=兰特(10000)+1000;
int d=兰特(100000)+10000;
int e=100万兰特+10000兰特;
int f=兰特nextInt(10000000)+1000000;
int g=兰特nextInt(100000000)+10000000;
如果(x使用随机数听起来不是一个好的解决方案,也不是从1开始计数。
一个足够简单的好解决方案可以是:
a) 给定输入n必须为0的约束
b) 使用basic
因为这听起来像是一个任务,所以我不会为这个解决方案编写代码。你必须以某种方式保存状态-例如,你已经使用了哪些数字。只需创建一个集,然后将你的数字保存在那里。将x与某种数字进行比较,它确实像作弊,整数有一个范围,立即使用该范围,而不是但这不是一个作业:P我很久以前也问过这个问题(不同的问题,但实际上是相同的代码)。只想知道如何避免使用相同的数字。如果我知道,我会问如何改进它,以便更快地找到数字。如果我不了解自己,我会来这里问。但再次说,这不是家庭作业。好的,二进制搜索会做这项工作,也会改进算法。如果你对代码有困难,我们可以提供帮助。当你满意的时候,请接受这个答案。