【问题标题】:Upper-triangle matrix looping上三角矩阵循环
【发布时间】:2021-11-18 16:49:56
【问题描述】:

例如,如果我有以下矩阵: enter image description here

表格中的值是元素的索引。

for (int count =0; index<9; count++) {
     //row = function of index
     //column = function of index

}

换句话说,如果矩阵的上三角形按照照片中的顺序排列,我如何从索引中获取行和列。

我一直在想这个问题,但我似乎无法弄清楚!

【问题讨论】:

  • 从更简单的开始:你将如何用两个循环来做到这一点?
  • 我试着这样想,我什至想不通!

标签: c++ matrix


【解决方案1】:
int i, j, v[10][10], k=0, n;
cin>>n;
for(i=0; i<n; i++)
{
     for(j=0; j<n; j++)
     if(i<j)
     {
           v[i][j]=k;
           k++;
      }
}
for(i=0; i<n; i++)
{
     for(j=0; j<n; j++)
          cout<<v[i][j]<<" ";
     cout<<endl;
}

我想这就是你想要的。结果应该与您的图像中一样。告诉我你是否想要别的东西。您从键盘输入的n 是矩阵中的行数和列数。

【讨论】:

  • 哦,我想我错过了沟通!我会相应地编辑帖子。我的意思是从索引中获取行和列。如图所示,元素的索引从 0 到 9。
【解决方案2】:
int matrix[n][n];
vector<pair<int, int>> indexMap;
for(int i=0;i<n;i++)
  for(int j=i;j<n;j++)
    indexMap.push_back(make_pair(i, j));
for(int i=0;i<indexMap.size();i++)
    cout << matrix[indexMap[i].first][indexMap[i].second] << " ";

我希望这是你所期望的。您可以通过indexMap 向量的索引访问每个元素(如果n=4,索引为0-9,如您在示例图中提到的)。 indexMap 向量大小取决于n。这里n是矩阵的大小。

您还可以从矩阵的上三角形的索引中获取行和列。

【讨论】:

    【解决方案3】:
    row_index(i, M):
    ii = M(M+1)/2-1-i
    K = floor((sqrt(8ii+1)-1)/2)
    return M-1-K
    
    column_index(i, M):
    ii = M(M+1)/2-1-i
    K = floor((sqrt(8ii+1)-1)/2)
    jj = ii - K(K+1)/2
    return M-1-jj
    

    其中 M 是矩阵的大小 这是一个链接algorithm for index numbers of triangular matrix coefficients 它以代数方式提供了有关答案的更多详细信息。归功于https://stackoverflow.com/users/4958/shreevatsar

    连同来自https://stackoverflow.com/users/2019794/michael-bauer的评论

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多