2015-12-06 2 views
-1

Давайте предположим, что у меня есть квадратная матрица (например, 4x4):Матрица хранится в станд :: вектор

a_00 a_01 a_02 a_03 
a_10 a_11 a_12 a_13 
a_20 a_21 a_22 a_23 
a_30 a_31 a_32 a_33 

И предположим, я сохранил эту матрицу в C++ станд :: вектор v, без записей на главной диагонали (a_ij где I = J):

v = {a_01, a_02, a_03, a_10, a_12, a_13, a_20, a_21, a_23, a_30, a_31, a_32} 

Как я могу написать функцию int idx(int i, int j), которая возвращает индекс записи a_ij в векторе V C++?

+0

Пожалуйста, покажите нам, что вы пробовали до сих пор. – Kiloreux

+0

Я пока не нашел решение! – user3061631

+0

Тогда, пожалуйста, попробуйте что-нибудь, поэтому люди здесь могут помочь вам понять, что вы вложили в это усилие. – Kiloreux

ответ

0

включают

using namespace std; 

int main() 
{ 
    int i, j, n; 
    cin >> n >> i >> j; 
    int ans = i * n + j - i; 
    if (j > i) 
     ans--; 
    cout << ans << endl; 
    return 0; 
} 

Я делаю это. Я решаю проблему, фактически думая, что у нас есть основная диагональ. Тогда ответ будет i * n + j. Очевидно, что в каждой строке есть только одна запись на главной диагонали, поэтому мы вычитаем количество строк до i-й строки, то есть i.

Теперь нам нужно использовать оператор if, чтобы увидеть, находится ли запись на главной диагонали i-й строки до или после j-го элемента. На самом деле просто.

Надеюсь, это помогло!

0

Для начала вместо i * n_cols + j вам нужно только умножить на (n_cols-1) - поскольку вам не хватает одного элемента в каждой строке. Кроме того, вам нужно также настроить j (в основном: if (j > i) --j). И вернуть ошибку, если i == j.

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