Регистрация
11 Дек 2013
Сообщения
93
Репутация
0
Спасибо
0
Монет
0
Выдает так:

4+

3+1+

2+2+

2+1+1+

1+1+1+1+

а должно быть вот так:

4

3+1

2+2

2+1+1

1+1+1+1

#include<iostream>

#include<vector>

using namespace std;

void printPartition(vector<int>& partition) {

for (int i = 0; i < partition.size(); i++) {

cout << partition << '+';

}

cout << endl;

}

void generatePartitions(int n, int maximum, vector<int>& currentPartition) {

if (n == 0) {

printPartition(currentPartition);

return;

}

for (int i = maximum; i >= 1; i--) {

if (i > n) {

continue;

}

currentPartition.push_back(i);

generatePartitions(n - i, i, currentPartition);

currentPartition.pop_back();

}

}



int main() {

int n;

cin >> n;

vector<int> currentPartition;

generatePartitions(n, n, currentPartition);



return 0;

}
 
cout << partition << '+'; у тя в последнем разе выдает попробуй просто разделить цикл на первый раз где значеие + "+" а остальные "+" + значение
 
Вот здесь

for (int i = 0; i < partition.size(); i++) {
cout << partition << '+';
}


Сделать например проверку.


// Если i не равно последнему элементу в цикле for то выводить
//в консоль со знаком + иначе без него
if (i!=partition.size()-1)
{
cout << partition << '+';
}
else
{
cout << partition;
}
 
#include
#include
#include
#include

using namespace std;

void printPartition(vector& partition) {
stringstream ss;
for (int i = 0; i < partition.size(); ++i) {
ss n;
vector currentPartition;
generatePartitions(n, n, currentPartition);
}
 
Назад
Сверху