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

标签 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==> 这不是彩虹数组 1,2,3,4,5,4,3,2,1==> 这是彩虹阵列。 这是程序应该如何工作:

1=User enters an integer, that will be our height, tells us how many number lists we will test. 2=User enter integer how long first list will be. Then program will get inputs from user for list. 3=Program should separate major list to 2 minor lists. 4=Program copying major list's elements to 2 minor list's.

在最后阶段,它比较 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;
    }
    }

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

最佳答案

对于奇数长度数组,您应该使用 length/2 而不是 length/2-1。如果长度为 9,则 length/2-1 = 3,因此您将只检查前 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;
}   

关于c++ - 检查彩虹数组(检查数组的反向样式是否与自身匹配),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45890572/

相关文章:

c++ - 在 visual studio 6 中将安装程序作为 C++ 实用程序的一部分包含在内

c++ - std::async 与 std::launch::async 策略的行为

javascript - 如何在循环时返回数组中的最大数

javascript - 如何使用 lodash 对多个进行分组

python-3.x - 这两种算法都是选择排序算法吗?

R 创建边缘列表

c++ - 信号/槽连接总数?

c++ - 通过存储用户选择的索引值实现 QDialogBu​​ttonBox

javascript - 我想循环遍历数组并修改属性

java - 如何使用 FileReader 确保在 Java 中找到文件?