2014-12-30 27 views
-3

我有一个deque<int>我想找到两个相等的数字之间的数量是否为偶数。例如:7,13,4,6,4,13,8,10应该是false,1,3,5,3,4,8,7,9,6,5,7应该是true。我认为我的程序是正确的,但是或者是因为两种情况都是正确的。任何想法为什么? PS:我对迭代器不太好。看看两个相等的数字之间的长度是双数是甚至


#include <iostream> 
#include <deque> 
using namespace std; 
    bool isJoined (deque<int>::iterator begin, deque<int>::iterator end) 
{ 
    for(auto i = begin ; i < end ;i++) 
     for(auto j=i+1;j<end;j++) 
     if(*i == *j && (j-i)%2 == 0) 
      return true;  

    return false; 
} 
int main() 
{  
    deque<int> test = {1,3,5,3,4,8,7,9,6,5,7}; 
    deque<int> test2 = {7,13,4,6,4,13,8,10}; 
    cout<<isJoined(test.begin(),test.end())<<endl; 
    cout<<isJoined(test2.begin(),test2.end())<<endl; 
} 
+0

您可以acc ess deques用[]'表示 – Brian

+2

之间任何两个相等? 2 1 2 3 4 5 3的答案是什么? – sashas

+0

@migdal答案是对的。两个'3'之间。 – pesho

回答

0

您有一个差一错误的位置:

if(*i == *j && (j-i)%2 == 0) 

你要算严格的迭代器之间的号码的数量......这是[1, 2, 3, 1]你想2 ,但迭代器之间的差异会给你3。因此,你想:

if (*i == *j && (j-i+1)%2 == 0) 

if (*i == *j && (j-i)%2 == 1) 

而且你可能会发现很容易,只需使用索引操作,避免迭代器干脆:

bool isJoined(const deque<int>& deq) 
{ 
    for (size_t i = 0; i < deq.size(); ++i) { 
     for (size_t j = i+1; j < deq.size(); ++j) { 
      if (deq[i] == deq[j] && (j-i)%2 == 1) { 
       return true; 
      } 
     } 
    } 

    return false; 
} 

这样也可以让你跨越内环:

for (size_t j = i+1; j < deq.size(); j += 2) { 
    // already enforcing an even number of numbers in bewteen 
    if (deq[i] == deq[j]) return true; 
} 
相关问题