这是我第一次使用C ++,看起来我遇到了一些困难。我的任务有以下说法:&#39;如果矩阵X的行数和列数相同(即X是方形矩阵),则找到主对角线元素的标量积,其中元素来自随机行K(K <= N)。&#39;
#include <iostream.h>
int main(){
int M,N,i,j;
int X[20][20];
do{cout<<"\n Vavedete stoinost za M:"<<endl;cin>>M;}
while(M<2||M>20);
do{cout<<"\n Vavedete stoinost za N:"<<endl;cin>>N;}
while(N<2||N>20);
for(i=0;i<M;i++)
for(j=0;j<N;j++)
{cout<<"\n Vavedete element ot X["<<i<<"]["<<j<<"]="<<endl;cin>>X[i][j];}
//usl.1.
int k;
if (i==j){
cout<<"\n ELementite na koi red da se umnojat s tezi na glavniq diagonal:"<<endl;cin>>k;
k=k-1;
int K[20];
for(i=0;i<M;i++)
for(j=0;j<M;j++){
int SP=1;
for(k=0;k<M;k++)
SP+=X[i][j]*X[k][j];
cout<<SP<<endl;}
return 0;}
}
答案 0 :(得分:0)
您的算法有几点:
如果i == j
,您可能不需要执行以下循环for(i=0;i<M;i++) for(j=0;j<M;j++){}
来计算最终总和(请参阅我在O(N)中执行的示例)
输入行号K
后,我不明白为什么要增加K
值
在输入矩阵中的所有值之前,我可能先检查M == N
在我的相应代码下面:
#include <iostream.h>
int main(){
int M,N,i,j;
int X[20][20];
do{cout<<"\n Vavedete stoinost za M:"<<endl;cin>>M;}
while(M<2||M>20);
do{cout<<"\n Vavedete stoinost za N:"<<endl;cin>>N;}
while(N<2||N>20);
//usl.1.
int k;
if (M==N)
{
for(i=0;i<M;i++)
for(j=0;j<N;j++)
{cout<<"\n Vavedete element ot X["<<i<<"]["<<j<<"]="<<endl;cin>>X[i][j];}
cout<<"\n ELementite na koi red da se umnojat s tezi na glavniq diagonal:"<<endl;cin>>k;
k=k-1;
int SP=1;
for(i=0;i<M;i++)
{
SP+=X[i][i]*X[k][i];
cout<<SP<<endl;
}
return 1;
}
return 0;
}
答案 1 :(得分:0)
如果你想将对角线与随机行K的元素相乘,那么为什么:
SP+=X[i][j]*X[k][j];
?
这只是将每个条目与镜像位置(沿对角线)的条目相乘。 这不是你所描述的。
您想要的是以下(伪)
k= random row number
for(column: columns){
total += X(column,column)*X(row,column)
}
不要把你的桌子称为'X'......不要。