Нужно перебрать все значения степеней слагаемых в формуле полинома. Вот эта формула: Для любых отличных от нуля действительных чисел a1,a2,...,ar и любого натурального n Мне нужно перебрать все последовательности вида k1,k2,...,kr. Например для n=3 и r=3, будут такие последовательности: 3, 0, 0 2, 1, 0 2, 0, 1 1, 2, 0 1, 1, 1 1, 0, 2 0, 3, 0 0, 2, 1 0, 1, 2 0, 0, 3 количество таких последовательностей, в общем случае, будет Хочу пример, желетельно на C или описание алгоритма своими словами.
Код (Text): void BruteForce(int i, int n, int r, int * k) { if ( i >= r ) { // в массиве k находятся значения k1, k2, ... for ( int j = 0; j < r; ++j ) { printf( "%d ", k[ j ] ); } } if ( i == r - 1 ) { // нужно выбрать последний. k[ i ] = n; } else { // перебираем все возможные значения для i-ого коэф. for ( int j = 0; j < n; ++ j ) { k[ i ] = j; // рекурсивно выбираем оставшиеся. BruteForce( i + 1, n - j, r, k ); } } } Что-то типо такого. Писал прямо в браузере, так что может и не заработать. Но пример думаю ясен.
Forever, спасибо большое. Вот так работает Код (Text): void BruteForce(int i, int n, int r, int * k) { if ( i >= r - 1 ) { // нужно выбрать последний. if(i==r-1) k[ i ] = n; // в массиве k находятся значения k1, k2, ... for ( int j = 0; j < r; ++j ) { printf( "%d ", k[ j ] ); } cout<<endl; } else { // перебираем все возможные значения для i-ого коэф. for ( int j = 0; j < n+1; ++ j ) { k[ i ] = j; // рекурсивно выбираем оставшиеся. BruteForce( i + 1, n - j, r, k ); } } }