1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| struct elt {
int sum;
List number_list;
} Elt;
vector<Elt> tab; // Tableau dynamique ou liste chaînée ou ...
vector<Elt>::Iterator* it = tab.iterator();
Elt* new_elt = NULL;
int ori_tab[] = {4, 5, -9, 200, -14, 12, 8, 20, 5};
int size = 9 /* or (sizeof(ori_tab) / sizeof(ori_tab[0]) */;
int max = 20, tmp_sum = 0, tmp_number = 0, pos = 0;
for(; pos < size; pos++, it->first()) {
tmp_number = ori_tab[pos];
if (tmp_number > max) { continue; /* Skip */ }
while(it->next()) {
tmp_sum = it->sum + tmp_number;
if (tmp_sum > max) { continue; /* Skip */ }
if (tmp_sum == max) { /* Found */ }
new_elt = new Elt(it); // Copy
new_elt->sum += tmp_number;
new_elt->number_list.add(tmp_number);
tab.add(new_elt);
}
new_elt = new Elt();
new_elt->sum = tmp_number;
new_elt->number_list.add(tmp_number);
tab.add(new_elt);
} |
Partager