Decir si un vector es palindromo o no

Iniciado por sora_ori, 16 Diciembre 2013, 11:04 AM

0 Miembros y 1 Visitante están viendo este tema.

sora_ori

Hola de nuevo,

De nuevo vengo a pedir ayuda, porque no consigo hacer que me diga si un vector es palindromo o no.

Dejo el código entero para que vean que estoy haciendo, pero la parte incorrecta es el palindromo, siempre me dice "No es palindromo".

Ejemplo: 5 6 6 5 -> Si es palindromo




#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<conio.h>

int main(){
   int n, i, num;
   
   do{
       printf("Grandaria del vector: ");
       scanf("%d", &n);
   }while(n<4 || n>20); //Entre 4 y 20
   
   int vector[n];
   
   for (i=0; i<n; i++){
       do{
          printf("Introduce un numero, vector %i: ", i+1);
          scanf("%d",&num);
          vector[i] = num;
       }while(num<0 || num>9); // Entre 0 y 9
   }
   
   // Mostrar vector
   printf("\n\nVector:\n");
   printf("____________________\n\n");
   for (i=0; i<n; i++)
       printf(" %d ", vector[i]);


   // PALINDROMO
   int temp = vector[i];
   int extraer = 0;
   int nuevonumero = 0;

   for(i = 0; temp > 0; i++){
         extraer = temp%10;
         nuevonumero = (nuevonumero*10) + extraer;
         temp = temp/10;
   }

   if(temp == nuevonumero){
             printf("\n\nEs palindromo");
   }
   else{
        printf("\n\nNo es palindromo");
   }
   

   getch();
   return 0;
}


Muchas gracias!

Almapa

#1
La verdad es que no se cómo está comprobando si es o no palíndromo (que si no me equivoco quiere decir que es un vector capicúa no?).
Yo haría algo más simple:

Código (cpp) [Seleccionar]
// PALINDROMO
   bool palindromo=1;
   for(i = 0; i<n/2; i++){
         if(vector[i]==vector[n-1-i]){}else{palindromo=0;}
   }

   if(palindromo==1){
             printf("\n\nEs palindromo");
   }
   else{
        printf("\n\nNo es palindromo");
   }

sora_ori

Muchas gracias, muy sencillo de hacer y entendible =)


Saludos

leosansan

#3
Tal como lo tienes planteado no es muy útil introducir el número como vector, sería mejor hacerlo directamente como un número:


Código (cpp) [Seleccionar]
#include <stdio.h>

int main(){
   int n, i, num;
   do{
       printf("Introduce el numero: ");
       scanf("%d", &num);
   }while(num<10 || num>999999999);
   // Mostrar vector
   printf("\n\nNumero:\n");
   printf("____________________\n\n");
   printf(" %d \n\n", num);
   // PALINDROMO
   int temp = num;
   int extraer = 0;
   int nuevonumero = 0;
   for(i = 0; temp > 0; i++){
       extraer = temp%10;
       nuevonumero = (nuevonumero*10) + extraer;
       printf("nuevonumero=%d\n",nuevonumero);;system("pause");//sobra
       temp = temp/10;
   }
   if(num == nuevonumero)
       printf("\n\nEs palindromo");
   else
       printf("\n\nNo es palindromo");
   return 0;
}


Pero si quieres usar el vector y nuevonumero te serviría;

Código (cpp) [Seleccionar]
#include <stdio.h>

int main(){
   int n, i, num;
   do{
       printf("Grandaria del vector: ");
       scanf("%d", &n);
   }while(n<2 || n>20); //Entre 2 y 20
   int vector[n];
   for (i=0; i<n; i++){
       do{
          printf("Introduce un numero, vector %i: ", i+1);
          scanf("%d",&num);
          vector[i] = num;
       }while(num<0 || num>9); // Entre 0 y 9
   }
   // Mostrar vector
   printf("\n\nVector:\n");
   printf("____________________\n\n");
   for (i=0; i<n; i++)
       printf(" %d ", vector[i]);
   int temp = 0;
   for (i=0; i<n; i++){
       temp=temp*10+vector[i];
   }
   printf("\ntemp=%d\n",temp);//sobra
   // PALINDROMO
   int nuevonumero = 0;
   for(i = n-1;  i>=0 ; i--){
       nuevonumero= nuevonumero*10+vector[i] ;
       printf("nuevonumero=%d\n",nuevonumero);system("pause");
   }
   if(temp == nuevonumero)
       printf("\n\nEs palindromo");
   else
       printf("\n\nNo es palindromo");
   return 0;
}


Aunque ya que estas usando un array, lo más simple sería ir comparando los extremos del vector:, como indico Almapa

Código (cpp) [Seleccionar]
#include <stdio.h>

int main(){
   int n, i, num;
   do{
       printf("Tam\xA4o del vector: ");
       scanf("%d", &n);
   }while(n<2 || n>20); //Entre 2 y 20
   int vector[n];
   for (i=0; i<n; i++){
       do{
          printf("Introduce un numero, vector %i: ", i+1);
          scanf("%d",&num);
          vector[i] = num;
       }while(num<0 || num>9); // Entre 0 y 9
   }
   // Mostrar vector
   printf("\n\nVector:\n");
   printf("____________________\n\n");
   for (i=0; i<n; i++)
       printf(" %d ", vector[i]);
   // PALINDROMO
   for(i = 0;  i<n/2 ; i++){
       printf("\n\ni=%d  vector[%d]=%d  vector[%d]=%d\n",i,i,vector[i],n-i-1,vector[n-i-1]);//sobra
       system("pause");//sobra
       if (vector[i]!=vector[n-i-1]){
           printf("\n\nNo es palindromo");
           return 1;
       }
   }
   printf("\n\nEs palindromo");
   return 0;
}


Saluditos! ..... !!!!