我做了一个小的java程序。整数将是一个输入,然后随机数将打印到控制台,直到我们找到整数输入。 代码会作弊,因为它会知道输入数字有多少位数。
将使用随机数,我想要做的是我想要排除已使用的每个随机数。但我不知道怎么做。好吧,我有一个想法,但这将是一个我不喜欢的便宜的旁路。它将从0开始并始终将其增加1值,直到我们找到输入。
这可以在java中完成(排除使用的随机数)吗?
我想我们可以制作一个列表,以便每个使用过的号码都在该列表中。在每个循环中访问列表以检查数字是否未使用。但这只是想象力,它真的可以在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);
}
}
}
答案 0 :(得分:0)
使用随机数听起来不是一个好的解决方案,也不是从1算起。 一个好的和简单的解决方案可能是:
a)给定输入n必须为0的约束
b)使用基本binary search。
由于这听起来像是一项任务,所以我不会为此解决方案编写代码。