void find() { int a[10]={0}; a[0] = 1; int index = 0; // 标示已经确定的元素的下标 for(int i = 2; i <= 1000; ++i) { bool find = false; int sum = 0; int b[10] = {0}; int k = -1; // 数组b的下标标示,数组b用于存储数组a下标 int j = 0; while (j <= index) { sum += a[j]; if (sum == i) { find = true; break; } else { if (sum < i) { if (j == index) //回溯 { sum -= a[j]; sum -= a[b[k]]; j = b[k] + 1; --k; if (k < -1) { break; } } else { b[++k] = j; ++j; } } else // 此处回溯 { sum -= a[j]; sum -= a[b[k]]; j = b[k] + 1; --k; if (k < -1) { break; } } } } if (!find) { a[++index] = i; } } if (i == 1001 && a[9] != 0) { for (int m = 0; m < 10; ++m) { cout << a[m]<< " "; } } else { cout <<"no Solution "; } cout << endl; }