【问题标题】:How can I generate all possible strings with 16 characters limited to "a" and "b"?如何生成限制为“a”和“b”的 16 个字符的所有可能字符串?
【发布时间】:2015-04-20 11:39:47
【问题描述】:

我需要生成所有可能的 16 个字符的字符串。字符只能是“a”或“b”。我怎么做?我知道有 2^16 种可能性。

这是我尝试使用的代码:

public class Query5 {
    public static void main(String[] args){
        //Query5
        String s="";
        String [] hardCoded = {"16","13","3","14","11","9","4","6","15","12","2","10","8","5","1","7"};
        for (int i=0; i<2; i++)
        {
            if (i==0)
                s=s.concat("a");
            else if (i==1)
                s=s.concat("b");

            for (int c=0; c<2; c++)
            {
                if (c==0)
                    s=s.concat("a");
                else if (c==1)
                    s=s.concat("b");

                for (int d=0; d<2; d++)
                {
                    if (d==0)
                        s=s.concat("a");
                    else if (d==1)
                        s=s.concat("b");

                    for (int e=0; e<2; e++)
                    {
                        if (e==0)
                            s=s.concat("a");
                        else if (e==1)
                            s=s.concat("b");

                        for (int f=0; f<2; f++)
                        {
                            if (f==0)
                                s=s.concat("a");
                            else if (f==1)
                                s=s.concat("b");

                            for (int g=0; g<2; g++)
                            {
                                if (g==0)
                                    s=s.concat("a");
                                else if (g==1)
                                    s=s.concat("b");

                                for (int h=0; h<2; h++)
                                {
                                    if (h==0)
                                        s=s.concat("a");
                                    else if (h==1)
                                        s=s.concat("b");

                                    for (int j=0; j<2; j++)
                                    {
                                        if (j==0)
                                            s=s.concat("a");
                                        else if (j==1)
                                            s=s.concat("b");

                                        for (int k=0; k<2; k++)
                                        {
                                            if (k==0)
                                                s=s.concat("a");
                                            else if (k==1)
                                                s=s.concat("b");

                                            for (int l=0; l<2; l++)
                                            {
                                                if (l==0)
                                                    s=s.concat("a");
                                                else if (l==1)
                                                    s=s.concat("b");

                                                for (int m=0; m<2; m++)
                                                {
                                                    if (m==0)
                                                        s=s.concat("a");
                                                    else if (m==1)
                                                        s=s.concat("b");

                                                    for (int z=0; z<2; z++)
                                                    {
                                                        if (z==0)
                                                            s=s.concat("a");
                                                        else if (z==1)
                                                            s=s.concat("b");

                                                        for (int o=0; o<2; o++)
                                                        {
                                                            if (o==0)
                                                                s=s.concat("a");
                                                            else if (o==1)
                                                                s=s.concat("b");

                                                            for (int p=0; p<2; p++)
                                                            {
                                                                if (p==0)
                                                                    s=s.concat("a");
                                                                else if (p==1)
                                                                    s=s.concat("b");

                                                                for (int q=0; q<2; q++)
                                                                {
                                                                    if (q==0)
                                                                        s=s.concat("a");
                                                                    else if (q==1)
                                                                        s=s.concat("b");

                                                                    for (int r=0; r<2; r++)
                                                                    {
                                                                        if (r==0)
                                                                            s=s.concat("a, ");
                                                                        else if (r==1)
                                                                            s=s.concat("b, ");
                                                                        System.out.println(s);
                                                                        System.out.println(" ");

                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

        }
    }
}

【问题讨论】:

  • 这是什么编程语言?
  • 生成所有 16 位整数。将每个转换为二进制。将 0 替换为 a,将 1 替换为 b。
  • 你在用电脑吗?您想在屏幕上显示所有这些字符串,还是将它们存储在堆栈或文件中?你知道如何编写简单的计算机程序吗?你能用 3 个字符解决这个问题吗? 2? 1 个?
  • @Beta 我第一次看到评论者提出的问题比实际的海报多...
  • @AlbertRenshaw:是的,这通常不是一个好兆头。

标签: java string random char


【解决方案1】:

这是一个比 N 个嵌套循环更简单的方法。

以正确长度的 a 字符串开头。从字符串的一端开始,比如左边,然后遍历它。

找到“b”后,将其更改为“a”。

当你找到一个 'a' 时,将其更改为 'b',打印字符串并返回到字符串的开头。

当你到达字符串的末尾(没有找到'a'),退出。

【讨论】:

    【解决方案2】:

    我不知道您使用的是什么编程语言,所以这里有一个脚本示例,您可以将其转换为所需的语言。 Objective-c 有一个字符串方法可以用另一个字符串替换字符串中的字符,你的语言可能需要一个自定义的方法,只是一个简单的循环。


    编辑:您使用的是 Java,您可以使用:http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#replaceAll%28java.lang.String,%20java.lang.String%29

    用 a 替换 0 用 b 替换 1

    还可以在 Java 中使用 Integer.toBinaryString(i) 将 int 转换为二进制字符串


    本着@Damien_The_Unbeliever 评论的精神。

    array strings = [];
    int i = 0;
    
    while (i < 2^16) {
    
    string s Integer.toBinaryString(i)
    
    s = [s replaceOccourancesOf "0" with "a"];
    s = [s replaceOccourancesOf "1" with "b"];
    
    while (s.length < 16) {
    
    s = s + "a";
    
    }
    
    strings = [strings, s];
    
    i++;
    
    }
    

    ^注意,这不是可执行的 Java 代码。它只是一个虚拟脚本。

    我不使用 Java 编程...我编写 Obj-c 并制作了这个脚本,它编译得很好并执行了所有可能的值:

    - (void)viewDidLoad {
        [super viewDidLoad];
        // Do any additional setup after loading the view, typically from a nib.
    
    
        NSMutableArray *strings = [[NSMutableArray alloc] init];
        int i = 0;
    
        while (i < (int)pow(2,16)) {
    
            NSString *s = binaryStringFromInteger(i);
    
            s = [s stringByReplacingOccurrencesOfString:@"0" withString:@"a"];
            s = [s stringByReplacingOccurrencesOfString:@"1" withString:@"b"];
    
            while (s.length < 16) {
    
                s = [NSString stringWithFormat:@"%@a", s];
    
            }
    
            [strings addObject:s];
    
            i++;
    
        }
    
        NSLog(@"%@", strings);
    
    
    }
    
    
    
        NSString * binaryStringFromInteger( int number ) {
        NSMutableString * string = [[NSMutableString alloc] init];
    
        int spacing = pow( 2, 2 );
        int width = ( sizeof( number ) ) * spacing;
        int binaryDigit = 0;
        int integer = number;
    
        while( binaryDigit < width )
        {
            binaryDigit++;
    
            [string insertString:( (integer & 1) ? @"1" : @"0" )atIndex:0];
    
            if( binaryDigit % spacing == 0 && binaryDigit != width )
            {
                [string insertString:@"" atIndex:0];
            }
    
            integer = integer >> 1;
        }
    
        return string;
    }
    

    从这里借来的 Obj-c 二进制转换代码:https://stackoverflow.com/a/4393275/2057171

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-18
      • 2019-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多