Buna! Imi puteti explica , va rog de ce nu imi afiseaza nimic programul?
Scrieți un program care citeşte o valoare naturală nenulă impară pentru n şi apoi generează şi afişează în ordine crescătoare lexicografic toate combinaţiile formate din n cifre care îndeplinesc următoarele proprietăţi:
- încep şi se termină cu 0;
- modulul diferenţei între oricare două cifre alăturate dintr-o combinaţie este 1.
Astfel, pentru n=5, combinaţiile afişate sunt, în ordine, următoarele: 01010, 01210.
Programul citește de la tastatură numărul n, impar.
Programul va afișa pe ecran, pe rânduri separate, soluțiile generate.
Acesta este programul incercat de mine:
#include
#include
using namespace std;
int n, v[20];
void citire()
{
cin>>n;
for(int i=1;i<=n;++i)
v[i]=i;
}
void afis (int k)
{
for (int i=1; i<=n; ++i)
cout<
cout<<'\n';
}
int verif (int k)
{
for (int i=1; i
if (v[k]==v[i])
return 0;
return 1;
}
void back1 (int k)
{
if (k==n+1)
afis (k);
else
{
for ( int i=3;i
{
v[1]=0;
v[n]=0;
v[2]=1;
v[n-1]=1;
if (abs(v[k-1]-v[k])==1)
v[k]=i;
if (verif(k))
back1(k+1);
}
}
}
int main ()
{
citire ();
back1 (1);
return 0;
}
Răspunsuri la întrebare
Răspuns de
3
#include <iostream>#include <cmath>#include <cstring>using namespace std;#define NR 20int x[NR],p,k,nr;char a[5000][20];
void init(int k){ x[k]=0;}
int succesor(int k){ if(x[k]<10) return 1; else return 0;}
int continuare(int k){ if(k==1&&abs(x[k]-2)!=1) return 0; if(k==p&&abs(x[k]-2)!=1) return 0; for(int i=2;i<=k;++i) if(abs(x[i]-x[i-1])!=1) return 0; return 1;}
int solutie(int k){ if(k==p+1) return 1; else return 0;}
void retin(){ a[nr][0]='0',a[nr][1]='1'; for(int i=1;i<=p;i++) a[nr][i+1]='0'+x[i]-1; a[nr][p+2]='1',a[nr][p+3]='0'; a[nr][p+4]='\0'; ++nr;}
void backtracking(){ int k; k=1; init(k); while(k>0) if(solutie(k)) { retin(); k--; } else if(succesor(k)) { x[k]++; if(continuare(k)) k++; } else init(k),k--;}
int main(){ cin>>p; if(p%2==0) return 0; if(p==3) cout<<"010\n"; else { p-=4,backtracking(); char aux[20]; for(int i=0;i<nr-1;i++) for(int j=i+1;j<=nr-1;++j) if(strcmp(a[i],a[j])==1) strcpy(aux,a[i]),strcpy(a[i],a[j]),strcpy(a[j],aux); for(int i=0;i<nr;++i) cout<<a[i]<<'\n'; } return 0;}
void init(int k){ x[k]=0;}
int succesor(int k){ if(x[k]<10) return 1; else return 0;}
int continuare(int k){ if(k==1&&abs(x[k]-2)!=1) return 0; if(k==p&&abs(x[k]-2)!=1) return 0; for(int i=2;i<=k;++i) if(abs(x[i]-x[i-1])!=1) return 0; return 1;}
int solutie(int k){ if(k==p+1) return 1; else return 0;}
void retin(){ a[nr][0]='0',a[nr][1]='1'; for(int i=1;i<=p;i++) a[nr][i+1]='0'+x[i]-1; a[nr][p+2]='1',a[nr][p+3]='0'; a[nr][p+4]='\0'; ++nr;}
void backtracking(){ int k; k=1; init(k); while(k>0) if(solutie(k)) { retin(); k--; } else if(succesor(k)) { x[k]++; if(continuare(k)) k++; } else init(k),k--;}
int main(){ cin>>p; if(p%2==0) return 0; if(p==3) cout<<"010\n"; else { p-=4,backtracking(); char aux[20]; for(int i=0;i<nr-1;i++) for(int j=i+1;j<=nr-1;++j) if(strcmp(a[i],a[j])==1) strcpy(aux,a[i]),strcpy(a[i],a[j]),strcpy(a[j],aux); for(int i=0;i<nr;++i) cout<<a[i]<<'\n'; } return 0;}
Alte întrebări interesante
Engleza,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
9 ani în urmă
Engleza,
9 ani în urmă
Matematică,
9 ani în urmă