我正在尝试构建一个程序,首先随机生成一个上象限矩阵(定义为'transmatrix'),其整数值为0和1.接下来,我想分析该矩阵的每个元素。如果在变换矩阵的第i,第j个条目中存在1,那么我想要一个定义为“前向阵列”的新矩阵,在相同的入口位置具有1到10之间的随机生成值。如果在变换矩阵的第i个,第j个条目中存在零,则我希望程序检查并且如果k,i和k,第j个条目都不为零(即,测试传递性)。如果两者都不是零而不是位置i,则前向阵列中的第j个应该具有1到10之间的随机生成值。如果一个为零,则生成一个随机数,rnd,在0和1之间,看它是否小于0.9。如果rnd小于0.9,那么前向阵列中的第i,第j个条目应该是从0到10的随机数字。如果rnd大于0.9,则前向阵列中的第j个位置应该等于零。 问题是'forwardarray'的输出不是上象限矩阵。任何人都可以试着指出我正确的方向吗? 我的代码是:
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{ ofstream outFile;
outFile.open("array.dat");
srand(time(NULL));
int noofpeople=4;
outFile << noofpeople << endl;
outFile << endl;
int happinesslevels[noofpeople];
for(int a=0; a<noofpeople; a++)
{
happinesslevels[a]=(rand() % 101);
outFile << happinesslevels[a] << " ";
}
outFile << endl;
/* Generate upper quadrant transmatrix */
double rnd=((double)rand()/RAND_MAX);
int transmatrix[noofpeople][noofpeople];
for(int b=0; b<noofpeople; b++) {
for (int c=b+1; c<noofpeople; c++) {
transmatrix[b][c]=(rand() % 2);
outFile << transmatrix[b][c] << " ";
}
outFile << endl;
}
double forwardarray[noofpeople][noofpeople];
for(int k=0; k<noofpeople;k++)
{
for(int i=k+1; i<noofpeople;i++)
{
for(int j=i+1; j<noofpeople;j++)
{
if (transmatrix[k][i]==1)
forwardarray[k][i]=(rand() % 10 + 1);
else if (transmatrix[k][i]!=1) {
if ((transmatrix[k][j]==1) && (transmatrix[i][j]==1))
forwardarray[k][i]=(rand() % 10 + 1);
else if ((transmatrix[k][j]==0) || (transmatrix[i][j]==0)) {
if (rnd<=0.9)
forwardarray[k][i]=(rand() % 11);
else
forwardarray[k][i]=0;
}
}
outFile << forwardarray[k][i] << " ";
outFile << endl;
}
}
}
}
我得到的数据是
4
81 37 86 36
0 0 1
0 0
1
2
9
3
0
答案 0 :(得分:0)
“上象限矩阵”是什么意思?因为我可以在代码中看到,你正在创建一个方阵,即行和列的数量相等的矩阵。我不确定你想要实现什么,这个描述似乎非常混乱,而且来源太大 - 你只需要描述问题的最短样本。
我在代码中做了一些更改 - if..else如果可以用if..else替换,并且缩进对读取没有帮助。从最内层循环移动写入指令后,我能够获得“上象限矩阵”,但我不知道这是否是您正在寻找的。算法的描述需要更多关于“k”的作用的说明。
for(int k=0; k<noofpeople;k++)
{
for(int i=k+1; i<noofpeople;i++)
{
for(int j=i; j<noofpeople;j++)
{
if (transmatrix[k][i]==1) {
forwardarray[k][i]=(rand() % 10 + 1);
} else {
if ((transmatrix[k][j]==1) && (transmatrix[i][j]==1)) {
forwardarray[k][i]=(rand() % 10 + 1);
} else {
if (rnd<=0.9)
forwardarray[k][i]=(rand() % 11);
else
forwardarray[k][i]=0;
}
}
}
outFile << forwardarray[k][i] << " ";
}
outFile << endl;
}