Cod sursa(job #1410159)

Utilizator danutbodbodnariuc danut danutbod Data 30 martie 2015 21:42:44
Problema Combinari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 5.03 kb
//#include <fstream>  //backtraking iterativ ==permutari
//using namespace std;
//ifstream fi("permutari.in");
//ofstream fo("permutari.out");
//int i,j,n;
//int a[100];
//bool ok;
//int main()
//{
// fi>>n;
// i=1;
// while(i>0){
//    if(i==n+1){    //daca am ajuns la solutie o afisam
//        for(j=1;j<=i-1;j++)   fo<<a[j]<<" ";
//        fo<<'\n';
//        i--;      //revenire
//        }
//     else      //daca nu am ajuns la solutie
//       if(a[i]<n){
//             a[i]++;        //daca se poate se creste valoarea lui a[i]
//             //se verifica solitia partiala
//             ok=true;
//             for(j=1;j<i;j++)
//                if(a[i]==a[j])ok=false;
//             if(ok==true) i++;  //daca sol. partiala e valida se continua
//            }
//       else {a[i]=0;i--;}//daca  nu se poate creste valoarea lui a[i] se revine
// }
//    return 0;
//}

//#include <fstream>  //backtraking iterativ ==aranjamente
//using namespace std;
//ifstream fi("permut.in");
//ofstream fo("permut.out");
//int i,j,n,k;
//int a[100];
//bool ok;
//int main()
//{
// fi>>n>>k;
// i=1;
// while(i>0){
//    if(i==k+1){    //daca am ajuns la solutie o afisam
//        for(j=1;j<=i-1;j++)   fo<<a[j]<<" ";
//        fo<<'\n';
//        i--;      //revenire
//        }
//     else      //daca nu am ajuns la solutie
//       if(a[i]<n){
//             a[i]++;        //daca se poate se creste valoarea lui a[i]
//             //se verifica solitia partiala
//             ok=true;
//             for(j=1;j<i;j++)
//                if(a[i]==a[j])ok=false;
//             if(ok==true) i++;  //daca sol. partiala e valida se continua
//            }
//       else {a[i]=0;i--;}//daca  nu se poate creste valoarea lui a[i] se revine
// }
//    return 0;
//}
#include <fstream>  //backtraking iterativ ==combinari
using namespace std;
ifstream fi("combinari.in");
ofstream fo("combinari.out");
int i,j,n,k;
int a[100];
bool ok;
int main()
{
 fi>>n>>k;
 i=1;
 while(i>0){
    if(i==k+1){    //daca am ajuns la solutie o afisam
        for(j=1;j<=i-1;j++)   fo<<a[j]<<" ";
        fo<<'\n';
        i--;      //revenire
        }
     else      //daca nu am ajuns la solutie
       if(a[i]<n){
             a[i]++;        //daca se poate se creste valoarea lui a[i]
             i++;
             a[i]=a[i-1];//pt. ca elementele sol trebuie sa fie in ord. cresc
            }
       else {a[i]=0;i--;}//daca  nu se poate creste valoarea lui a[i] se revine
 }
    return 0;
}
//#include <fstream> //permutari infoarena var I 100p
//using namespace std;
//ifstream f("permutari.in");
//ofstream g("permutari.out");
//int a[100], n, i, k;
//void afisare(int i){
//  int j;
//  for(j=1;j<=i;j++)
//      g<<a[j]<<" ";
//  g<<'\n';
//}
//int valid(int i){
//  int j;
//  for(j=1;j<i;j++)
//   if(a[i]==a[j]) return 0;
//  return 1;
//}
//void back(int i){
//  int val;
//  for(val=1;val<=n;val++){
//      a[i]=val;
//      if(valid(i))
//          if(i==n) afisare(i);
//          else back(i+1);}
//}
//int main()
//{
//    f>>n;
//    back(1);
//    return 0;
//}
//#include <fstream>   //permutari infoarena var II 100p
//using namespace std; //(fara valid-dar cu vector de viz)
//ifstream f("permutari.in");
//ofstream g("permutari.out");
//int a[100], n, i, k,viz[100];
//void afisare(int i){
//  int j;
//  for(j=1;j<=i;j++)
//      g<<a[j]<<" ";
//  g<<'\n';
//}
//void back(int i){
//  int j;
//  for(j=1;j<=n;j++){
//      if(viz[j]==0){
//          viz[j]=1;
//          a[i]=j;
//          if(i==n) afisare(i);
//            else back(i+1);
//          viz[j]=0;
//     }
//}}
//int main()
//{
//    f>>n;
//    back(1);
//    return 0;
//}
//#include <fstream>
//#include <cmath>
//
//using namespace std;
//ifstream f("combinari.in");
//ofstream g("combinari.out");
//int n, k, a[19];
//
//void init (int l) {
//  a[l] = l-1;
//}
//
//bool succesor (int l) {
//  a[l]++;
//  return a[l] < n-(k-l)+1;
//}
//
//bool valid (int l) {
//
//    return a[l-1] < a[l];
//}
//
//bool sol (int l) {
//  return l == k; // Am completat toate cele n locuri?
//}
//
//void tip () {
//  int i;
//
//  for (i = 1; i <= k; i++)
//    g << a[i] << ' ';
//  g << endl;
//}
//
//void bt (int l) {
//  init (l);           // initializare
//  while (succesor(l)) // cat timp avem un succesor
//    if (valid(l))     // Sunt indeplinite conditiile?
//      if (sol(l))     // Avem o solutie completa?
//        tip();        // Prezentam solutia.
//      else            // Nu?
//        bt(l+1);      // Trecem la nivelul urmator.
//}
//int main()
//
//{
//    f>>n>>k;
//    bt(1);
//    return 0;
//}
//#include <fstream>
//using namespace std;
//ifstream f("submultimi.in");
//ofstream g("submultimi.out");
//int main()
//{
//    int i,j,lim,n;
//    f>>n;
//    lim=1<<n;
//    for(i=1;i<lim;i++)
//    {
//        for(j=1;j<=n;j++)
//            if(i&(1<<(j-1)))
//                g<<j<<" ";
//        g<<'\n';
//    }
//    return 0;
//}