Informatică, întrebare adresată de StefaniaR, 9 ani în urmă

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 ionutg38
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;}
Alte întrebări interesante