繁体   English   中英

用许多嵌套循环重写代码

[英]Rewriting code with many nested loops

我想知道您是否可以递归地编写这样的内容或使用其他循环系统:

std::string a = "00000000";
for (int i = 0; i<8; i++) {
    a[i] = '1';
    for (int j = 0; j<8; j++) {
        if (i!=j) {
            a[j] = '1';
            ... //more for loops with the same structure
            std::cout<<a[j]<<"\n";
            a[j] = '0';
    }
    a[i] = '0';
}

我正在尝试打印出0和1的每个可能的八位组合,而不使用任何库(如果需要的话,除位集外)。 如果以这种方式这样做,我将得到8个for循环,这有点多。 我想知道是否有一种方法可以使用递归或使用标准的do / while / for循环的巧妙技巧来压缩它。

首先,您的循环是不正确的:它们从0到7(包括0和1)运行,而它们应该从0到1(包括0和1)运行,因为位要么为零,要么为1。

就所有8位组合而言,您可以通过一个循环来完成:使用从0到255(含0和255)之间的int计数,并打印其二进制表示形式:

for (int i = 0 ; i != 256 ; i++) {
    cout << bitset<8>(i).to_string() << endl;
}

可以通过简单的for循环和二进制操作来完成此任务。 位位移i的量,然后&它被1至掩盖位。

#include <iostream>
void printBinary()
{
    for(int i = 0; i < 256; i++){
        for(int bit = 7; bit >= 0; bit--){
            std::cout << (i >> bit & 1);
        }
        std::cout << std::endl;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM