18-07-2011, 21:21
|
|
|
|
חבר מתאריך: 04.11.04
הודעות: 6,986
|
|
תודה, אבל אם אני מבין נכון את הפיתרון שלך אז הוא מבצע חזרות (תזכור שאותו מספר יכול להופיע כמה פעמים).
בכל אופן, בסוף הלכתי על פיתרון רקורסיבי לבעיה שהיה ממש פשוט:
קוד:
#include <iostream>
using namespace std;
#define N 13
#define K 10
void do_stuff(int curr_idx,int* arr,int len);
void print_arr(int* arr,int len) {
for (int i=0; i<len;++i)
cout<<arr[i];
cout<<endl;
}
int main()
{
int arr[N];
for (int i=0; i < N ; ++i)
arr[i]=0;
arr[0]=K;
do_stuff(0,arr,N);
return 0;
}
void do_stuff(int curr_idx,int* arr,int len)
{
if (arr[curr_idx]==0) {
print_arr(arr,len);
return;
}
if (curr_idx + 1 == len) {
print_arr(arr,len);
arr[curr_idx]=0;
return;
}
int temp=arr[curr_idx];
for (int i=0 ; i <= temp; ++i) {
arr[curr_idx+1]=i;
arr[curr_idx]=temp-i;
do_stuff(curr_idx+1,arr,len);
}
}
|