如何在我的回溯器(java)中实现它?

时间:2017-01-12 12:07:44

标签: java list caching random

我做了一个小的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);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

使用随机数听起来不是一个好的解决方案,也不是从1算起。 一个好的和简单的解决方案可能是:

a)给定输入n必须为0的约束

b)使用基本binary search

由于这听起来像是一项任务,所以我不会为此解决方案编写代码。