2013-11-25 5 views
-1
#include <iostream> 

using namespace std; 

int main() 
{ 
    int a, count = 0; 
    cin >> a; 
    int x[a], y[a], istix[a], istiy[a], br1 = 0, br2 = 0; 

    for (int i = 0; i < a; i++) 
     cin >> x[i] >> y[i]; 

    for (int i = 0; i < a; i++){ 
     for (int j = 0; j < a; j++){ 
      if(x[i] == y[j]){ 
       count++; 
       istix[br1] = i; 
       istiy[br2] = j; 
       br1++; 
       br2++; 
      } 
     } 
    } 

    if (count >= 3){ 
     cout << "Pozicii na isti elementi vo prvata niza:" << endl; 
     for (int i = 0; i < br1; i++) 
      cout << istix[i] << endl; 
     cout << "Pozicii na isti elementi vo vtorata niza:" << endl; 
     for (int i = 0; i < br2; i++) 
      cout << istiy[i] << endl; 
    } 

    return 0; 
} 

Я пишу задачу, где я должен проверить, есть ли более 3-х элементов в двух массивах с одинаковым значением, если это так, я должен вывести их индекс в обоих массивах.Положение элементов массива

Моя программа выводит правильно для первого массива, но не для второго. Я использовал тот же метод для обоих, так почему он не работает?

5 
9 4 
2 5 
4 1 
5 9 
12 59 
Pozicii na isti elementi vo prvata niza: 
0 
2 
3 
Pozicii na isti elementi vo vtorata niza: 
3 
0 
1 

Это фактический выход, все правильно, за исключением последнего массива:

3 
0 
1 

Это должно быть:

0 
1 
3 
+0

Что вход, ожидаемый выход, и фактический выход? – interjay

+0

Обновлен с ожидаемым/фактическим результатом. – user3002211

+0

Результат выглядит правильно для меня ... Почему, по-вашему, это должно быть иначе? – interjay

ответ

0

Это не действительный C++ код. Вы не можете объявить массив неизвестного размера - это должно быть постоянное выражение.

Если вам нужен динамический массив, вам необходимо использовать new (и соответствующий delete) или использовать соответствующие контейнеры (например, std::vector), которые выполняют эту работу за вас.

int a; 
cin >> a; 
int* x = new int[a]; // this will create a dynamic array with a elements 
... 
delete [] x; 

Или

int a; 
cin >> a; 
std::vector<int> vec(a); 
+0

Большое спасибо за это. В следующий раз я обязательно буду использовать указатели, хотя я не совсем понимаю вашу строку кода, но я попытаюсь провести исследование и посмотреть, что именно он делает. Что касается векторов, я еще не изучил их. – user3002211

+1

@ user3002211 «Я обязательно буду использовать указатели в следующий раз» - *** НЕТ НЕТ НЕТ НЕТ НЕТ НЕТ *** забыть их. В C++ используйте 'vector'. –

+0

@ user3002211 Если это не для академических упражнений, вы должны использовать стандартные контейнеры (например, «вектор»). Я только показал распределение памяти вручную, как кажется, это академический проект. –

Смежные вопросы