@x88reg

Как в С++ получить все возможные двоичные числа определенной длинны?

Задача
Необходимо получить список всех возможных двоичных чисел указанной длинны. Например если пользователь ввёл 3, то результат будет:
001
010
011
100
101
110
111


Важно использовать матрицу и массивы.
Мой код
#include <iostream>

using namespace std;

int main()
{
    int K;
    
    cin >> K;
    const int N = 10;
    int a[K][N];
    
    for (int i=0; i<N; i++){
        for (int j=0; j<K; j++){
    	      if(j==i){a[i][j] = 1;}
    	        else(a[j][i] = 0);
    	}
    }
    
    for (int i=0; i<N; i++){
        for (int j=0; j<K; j++){
    	      cout<<a[j][i];
    	}
    	cout<< endl;
    }
    	  
    		
}


Результат
63ceb1ad78c4a215561012.png
  • Вопрос задан
  • 345 просмотров
Решения вопроса 1
@Irval
Наиболее оптимальный вариант без использования массивов:
std::string get_binary(int x, int n) {
    string s = "";
    for (int i = n - 1; i >= 0; --i) {
        s.push_back('0' + ((x >> i) & 1));
    }
    return s;
}
int main() {
    int n;
    cin >> n;
    for (int i = 0; i < (1LL << n); ++i) {
        cout << get_binary(i, n) << endl;
    }
}

С использованием массивов:
int main() {
    int n;
    cin >> n;
    vector<vector<bool>> arr(1LL << n, vector<bool>(n, 0)); // vector<bool> для чуть большей оптимизации использования памяти
    for (int i = 0; i < n; ++i) {
        bool curr = false;
        int frequency = 1LL << i;
        int j = 0;
        while (j < arr.size()) {
            for (int k = 0; k < frequency; ++k, ++j) {
                arr[j][i] = curr;
            }
            curr = !curr;
        }
    }

    for (int i = 0; i < arr.size(); ++i) {
        for (int j = n - 1; j >= 0; --j) {
            cout << (arr[i][j] ? '1' : '0');
        }
        cout << endl;
    }
}

Вывод:
63f916297258a397716968.png
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы