检查彩虹数组(检查数组的反向样式是否与自身匹配)

时间:2017-08-25 23:32:49

标签: c++ arrays algorithm loops

#include <iostream>
int main(){
    bool check;
    int lenght=1,height=1;
    int array[height][lenght];
    std::cin>>height;
    int a=0;
    for(int i=1;i<=height;i++){
        std::cin>>lenght;
        for(int i=0;i<=lenght;i++)
            std::cin>>array[a][i];
        if (lenght%2==0){
            int array1[height][lenght/2],array2[height][lenght/2];
            for(int i=0;i<=lenght/2;i++)
                array1[a][i]=array[a][i];
            for(int i=0;i<=lenght/2;i++)
                array2[a][i]=array[a][lenght-i-1];
            for(int i=0;i<=lenght/2;i++)
                if(array1[a][i]!=array2[a][i])
                check= false;
            a++;
        check=true;
        if(check==true)
        std::cout<<"its rainbow array ! ";
        else
        std::cout<<"you cant get any unicorn :( ";
        }
        else{
            int array1[height][lenght/2-1],array2[height][lenght/2-1];
            for(int i=0;i<lenght/2-1;i++)
                array1[a][i]=array[a][i];
            for(int i=0;i<lenght/2-1;i++)
                array2[a][i]=array[a][lenght-i-1];
            for(int i=0;i<lenght/2-1;i++)
                if(array1[a][i]!=array2[a][i])
                check= false;
            a++;
        check=true;
        if(check==true)
        std::cout<<"its rainbow array ! ";
        else
        std::cout<<"you cant get any unicorn :( ";
        }
    }

}   

抱歉英语不好。我正在尝试检查是否将数组分成一半,然后检查这些部分是否匹配。 例如= 1,2,3,4,5,6 ==&gt;这不是彩虹阵列 1,2,3,4,5,4,3,2,1 ==&GT;这是彩虹阵列。 这就是程序应该如何运作:

  

1 =用户输入一个整数,这将是我们的高度,告诉我们将测试多少个数字列表。   2 =用户输入整数第一个列表的整数。然后程序将从用户获取列表输入。   3 =程序应将主要列表分为2个次要列表。   4 =将主要列表的元素复制到2个次要列表的程序。

在最后阶段,它将2个列表与更改bool值进行比较,为true或false。但在我的情况下,它总是如此。这是我几个小时前写的工作代码。

#include <iostream>
bool checkarray(int *array,int lenght);
int main(){
    int array[9]={1,2,3,4,5,4,3,2,4};
    int lenght=9;
    if(checkarray(array,lenght)==true)
        std::cout<<"its rainbow array ! ";
    else
        std::cout<<"you cant get any unicorn :( ";
}
bool checkarray(int array[],int lenght){
    if (lenght%2==0){
        int array1[lenght/2],array2[lenght/2];
        for(int i=0;i<=lenght/2;i++)
            array1[i]=array[i];
        for(int i=0;i<=lenght/2;i++)
            array2[i]=array[lenght-i-1];
        for(int i=0;i<=lenght/2;i++)
            if(array1[i]!=array2[i])
                return false;

        return true;
        }
    else{
        int array1[lenght/2-1],array2[lenght/2-1];
        for(int i=0;i<lenght/2-1;i++)
            array1[i]=array[i];
        for(int i=0;i<lenght/2-1;i++)
            array2[i]=array[lenght-i-1];
        for(int i=0;i<lenght/2-1;i++)
            if(array1[i]!=array2[i])
                return false;

        return true;
    }
    }

但每当我想要添加用户体验时,它就像第一个代码一样。请帮忙

1 个答案:

答案 0 :(得分:2)

对于奇数长度数组,您应该使用长度/ 2而不是长度/ 2-1。如果长度是9然后长度/ 2-1 = 3,那么你只会检查第一个和最后3个元素而不是4个。实际上你甚至不需要在不同的分支中处理这两个案例。

bool checkarray(int array[],int length){
    for(int i=0;i<length/2;i++)
      if(array[i]!=array[length-1-i])
        return false;
    return true;
}