2017-08-25 36 views
0
#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 =用戶輸入一個整數,這將是我們的高度,告訴我們將測試多少個號碼列表。 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; 
    } 
    } 

但是,無論何時我想添加用戶體驗,它都會像第一個代碼一樣發生。請幫助

+0

'int array [height] [lenght];' - 這和看起來像這樣的行不是合法的C++。 C++要求數組使用常量來表示條目的數量,而不是變量。 – PaulMcKenzie

+0

@PaulMcKenzie所以我如何描述2維動態數組?與新的int?虐待 –

+0

'#包括'然後'std :: vector > array(height,std :: vector (length));' – PaulMcKenzie

回答

2

對於奇數長度數組,您應該使用長度/ 2而不是長度/ 2-1。如果長度是9,那麼length/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; 
} 
+0

哦謝謝。但我認爲它應該是這樣的:如果長度很奇怪,那麼(長度爲1)/ 2; –

+0

長度是一個整數值。即使原始值是奇數,長度/ 2也會自動變爲整數(向下舍入)。 – Selindek