Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > алгоритм перебора


Автор: qw354 17.7.2007, 13:20
итак задача:

char a[300]="123\*длиииинная стока*\xyz";
char bufer[300];
for(;;)
{
\\тут чтета делается так, чтоб было как в примере работы программы, что ниже написан
printf("%s\n",bufer);
}

пример работы при a="123"
вывод:
1
2
3
11
12
13
21
...
111
112
113
121
...
323
331
332
333
...
3 n раз.
вроде все понятно smile 
решил вот поразвлечся написать прогу какуюнить(давно уж ниче не писал) да и пригодится эта прога может  smile  вроде простую задачу поставил, а нет, ниче в голову не приходитsmile  сам знаю, в любом учебнике наверно эта прга есть... главно сам алгоритм узнать бы..

Автор: mikla 17.7.2007, 13:51
Попробуй так : 
Код


   var M,N,i:byte;
    X:array[ byte ] of byte;
    Yes:boolean;
    f:text;
      procedure Next(var X:array of byte;var Yes:boolean);
      var i:byte;
      begin
        i:=N;

        while (i>0)and(X[i]=M) do begin X[i]:=1;dec(i) end;
        if i>0 then begin inc(X[i]);Yes:=true end
            else Yes:=false
      end;

    begin
     readln(M);
     for n:=1 to M do
     begin
      for i:=1 to N do X[i]:=1;
           repeat
             for i:=1 to N do write(X[i]);writeln;
                 Next(X,Yes)
             until not Yes
      end;
    end.




Код


#include <iostream>
using namespace std;

void generate ( int k, int m, int n, int x[100]) {
    if ( k == n ) {
        for ( int i = 1; i<=n; i++ ) cout << x[i];  
        cout << endl;
    }
    else
        for ( int j = 1; j<=m; j++ ) {
            x[k+1] = j;
            generate (k+1,m,n,x);
        }
};

int main()
{
    int M,N;
    int X[100];
    cin >> M;
    for ( N = 1; N<=M; N++ ) generate(0,M,N,X);
    return 0;
}


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)