Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 沿对角线编程_C++_Arrays_Matrix - Fatal编程技术网

C++ 沿对角线编程

C++ 沿对角线编程,c++,arrays,matrix,C++,Arrays,Matrix,我把一个矩阵展平成一维数组。如何在所有对角线中放置0?例如,对于4x4矩阵,我尝试了这个(n=4) 初始化j=0,它在我的机器上工作 int main() { int j = 0, n=4, global_matrix[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16}; for (int i = 0; i < n*n; i++) { if (i % 4 == 0) {

我把一个矩阵展平成一维数组。如何在所有对角线中放置
0
?例如,对于
4x4
矩阵,我尝试了这个(
n=4


初始化j=0,它在我的机器上工作

int main()
{
    int j = 0, n=4, global_matrix[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

    for (int i = 0; i < n*n; i++)
    {
        if (i % 4 == 0)
        {
            global_matrix[i + j] = 0;
            j++;
        }
    }
    for(int i = 0; i < n*n; i++)
        cout<<global_matrix[i];
    return 0;
}
intmain()
{
int j=0,n=4,全局_矩阵[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
对于(int i=0;icout初始化j=0,它在我的机器上工作

int main()
{
    int j = 0, n=4, global_matrix[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};

    for (int i = 0; i < n*n; i++)
    {
        if (i % 4 == 0)
        {
            global_matrix[i + j] = 0;
            j++;
        }
    }
    for(int i = 0; i < n*n; i++)
        cout<<global_matrix[i];
    return 0;
}
intmain()
{
int j=0,n=4,全局_矩阵[16]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
对于(int i=0;icout没有必要对所有元素进行循环,并使用一个条件来确定哪些元素位于对角线上。对
n
对角线元素进行简单循环即可

关键的观察结果是,每次移动到下一行时,对角线元素都会移动一个位置。因此,如果查看所有对角线元素的索引,它们的间距为
n+1

for (int i = 0; i < n; ++i) {
    global_matrix[i * (n + 1)] = 0;
}
for(int i=0;i

另一种推导方法是:当访问存储在一维数组中的矩阵中的元素
(i,k)
时,索引计算是
i*n+k
。对于对角线元素,
i
k
相等,因此该表达式变为
i*n+i
。应用基本代数,这等于
i*(n+1)

无需为此循环所有元素,并使用条件确定哪些元素位于对角线上。在
n
对角线元素上进行简单循环即可

关键的观察结果是,每次移动到下一行时,对角线元素都会移动一个位置。因此,如果查看所有对角线元素的索引,它们的间距为
n+1

for (int i = 0; i < n; ++i) {
    global_matrix[i * (n + 1)] = 0;
}
for(int i=0;i

另一种推导方法是:当访问存储在一维数组中的矩阵中的元素
(i,k)
时,索引计算是
i*n+k
。对于对角线元素,
i
k
相等,因此该表达式变为
i*n+i
。应用基本代数,这等于
i*(n+1)

使用索引计算
x+y*width
和两个循环计算y和x。使用索引计算
x+y*width
和两个循环计算y和x。