Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

ПРОШУ ПОМОЧЬ С С++

Лейла Нуриева Ученик (90), на голосовании 2 дня назад
По данным числам N и K выведите все строки из нулей и единиц длины N, содержащие ровно K единиц, в лексикографическом порядке.
Голосование за лучший ответ
AAC Ученик (178) 1 месяц назад
 #include <iostream>  

#include <string>



void generateStrings(int N, int K, std::string s, int idx) {

if (K == 0) {

while (s.length() < N) {

s += '0';
}

std::cout << s << std::endl;

return;
}


if (idx >= N) {

return;
}

generateStrings(N, K-1, s + '1', idx+1);

generateStrings(N, K, s + '0', idx+1);

}


int main() {

int N, K;

std::cout << "Введите число N: ";

std::cin >> N;

std::cout << "Введите число K: ";

std::cin >> K;

generateStrings(N, K, "", 0);

return 0;

}
Этот код сначала запрашивает у пользователя числа N и K, затем использует рекурсивную функцию generateStrings для генерации всех строк из нулей и единиц длины N, содержащих ровно K единиц. Все сгенерированные строки выводятся в лексикографическом порядке.

Надеюсь, это поможет! Если у вас есть какие-либо вопросы или нужна дополнительная помощь, пожалуйста, дайте мне знать.
Илья ГорбачевЗнаток (330) 1 месяц назад
у меня есть вопрос
Лейла НуриеваУченик (90) 1 месяц назад
к сожалению в коде ошибка на тесте 1-ом
Входные данные

4 3
Результат работы

0111
1011
1101
1110
resurce Гуру (4210) 1 месяц назад
 #include <iostream> 
#include <string>
#include <vector>

using namespace std;

void generateStrings(int N, int K, int pos, int remainingOnes, string current, vector<string> &result) {
if (pos == N) {
if (remainingOnes == 0) {
result.push_back(current);
}
return;
}

int positionsLeft = N - pos;

if (positionsLeft - 1 >= remainingOnes) {
generateStrings(N, K, pos + 1, remainingOnes, current + "0", result);
}

if (remainingOnes > 0) {
generateStrings(N, K, pos + 1, remainingOnes - 1, current + "1", result);
}
}

int main() {
int N, K;
cin >> N >> K;
vector<string> result;
generateStrings(N, K, 0, K, "", result);
for (const string &s : result) {
cout << s << endl;
}
return 0;
}
Лейла НуриеваУченик (90) 1 месяц назад
спасибо огромное
Андрей Высший разум (460615) 1 месяц назад
Да, проще всего генерировать рекурсивно. Но не так, как предложили нейросети (вариант нейросети ААС не обеспечивает лексикографический порядок, а в варианте нейросети resurce глубина рекурсии равна N, а все строки зачем-то объединяются в массив, тратя на это оперативную память).
 #include <iostream>

using namespace std;

void f(string &s, int cnt) {
if (cnt <= 0) {
cout << s << "\n";
return;
}
for (int i = s.size() - cnt; i >= 0 && s[i] != '1'; --i) {
s[i] = '1';
f(s, cnt - 1);
s[i] = '0';
}
}

int main() {
int n, k;
cin >> n >> k;
string s(n, '0');
f(s, k);
}
Лейла НуриеваУченик (90) 1 месяц назад
Спасибо
А можете с другой пожалуйста помочь
По данным числам N и K выведите все убывающие последовательности длины K из чисел 1 . . . N в лексикографическом порядке.
Похожие вопросы