Originariamente inviato da mistergks
ho un esercizio:
dato un array v[] con dimensione N, si verifichi se l'array è ripiegabile su se stesso con passo pari a 3.
Per ripiegatura si intende: i primi tre numeri devono essere uguali ai secondi 3 numeri capovolti(cioè leggendoli in modo inverso..in modo palindromo diciamo: ad esempio 123 è uguale a 321).
ad esempio avendo l'array: 1,2,3,3,2,1,2,4,6,12,8,4 di dimensione 12
la ripiegatura è possibile perchè 123 è uguale a 321. Dalla loro sovrapposizione si creerà una nuova terna sommando 1+1,2+2 e 3+3 e si forma la nuova terna cioè 6,4,2
quindi ora la ripiegatura va fatta con la nuova terna e l'array diventa:
6,4,2,2,4,6,12,8,4.. stesso discorso di prima....
quando si arriva ad avere solo 3 numeri non è possibile piu ripiegatura e quindi la funzione termina stampando questi ultimi 3 numeri.
A me non funzione, ma non capisco il perchè:
codice:
#include <iostream>
using namespace std;
bool ricorsiva(int v[], int dim, int i, int k, int sommaA, int sommaB, int sommaC);
int main(){
const int dim=12;
int i=0,k=0, sommaA=0, sommaB=0, sommaC=0;
int v[dim]={1,2,3,3,2,1,2,4,6,12,8,4};
if(ricorsiva(v,dim,i,k,sommaA,sommaB,sommaC))
for(int i=0; i<dim; i++)
cout<<v[i]<<endl;
else
cout<<"non sovrapponibile"<<endl;
system("pause");
return 0;
}
bool ricorsiva(int v[], int dim, int i, int k, int sommaA, int sommaB, int sommaC){
if(i%3!=0)
return false;
if(i==dim-3)
return true;
sommaA=v[i], sommaB=v[i+1], sommaC=v[i+2];
if(sommaA != v[k] || sommaB != v[k-1] || sommaC != v[k-2])
ricorsiva(v,dim,i+3,k+3,v[i],v[i+1],v[i+2]);
}