C++ 两个矩阵的迹
矩阵A的行主形式为1到RC的数字。B的列主形式为1到RC的数字。计算这两个矩阵的总和,从而找到p[1][1]+p[2][2]…p[min(R,C)][min(R,C)]的轨迹。 输入输出 2 30 3 3 2 1 2 输入的第一行是没有测试用例。 我的代码适用于单个测试用例,但不适用于所有测试用例。 如果输入为 1. 3 3 我得到了期望的输出30。 但当我以 2. 3 3 1 2 我得到的输出是 30 十一, 这是我的密码C++ 两个矩阵的迹,c++,C++,矩阵A的行主形式为1到RC的数字。B的列主形式为1到RC的数字。计算这两个矩阵的总和,从而找到p[1][1]+p[2][2]…p[min(R,C)][min(R,C)]的轨迹。 输入输出 2 30 3 3 2 1 2 输入的第一行是没有测试用例。 我的代码适用于单个测试用例,但不适用于所有测试用例。 如果输入为 1. 3 3 我得到了期望的输出30。 但当我以 2. 3 3 1 2 我得到的输出是 30 十一, 这是我的密码 #include <
#include <iostream>
using namespace std;
int min(int a,int b)
{
return (a>b)?b:a;
}
int main()
{
int T,R,C,i,j,k=1,trace=0;
int A[10][10],B[10][10];
int r;
cin>>T;
if(T<1 || T>1000000)
cout<<"invalid";
while(T>0)
{
cin>>R>>C;
if(R<1 ||R>100000 || C<1 || C>100000)
cout<<"invalid";
for(i=0;i<R;i++)
{
for(j=0;j<C;j++)
{
A[i][j]=k;
k++;
if (k>R*C)
break;
}
}
k=1;
for(i=0;i<C;i++)
{
for(j=0;j<R;j++)
{
B[i][j]=k;
k++;
if (k>R*C)
break;
}
}
r=min(R,C);
for(i=0;i<r;i++)
{
for(j=0;j<r;j++)
{
A[i][j]+=B[i][j];
}
}
for(i=0;i<r;i++)
{
trace+=A[i][i];
}
cout<<trace<<"\n";
trace=0;
T--;
}
return 0;
}
#包括
使用名称空间std;
最小整数(整数a,整数b)
{
返回(a>b)?b:a;
}
int main()
{
int T,R,C,i,j,k=1,trace=0;
INTA[10][10],B[10][10];;
INTR;
cin>>T;
如果(100万)
cout>R>>C;
如果(R100000 | C100000)
cout您应该添加:
k = 1;
就在第一个for循环之前(在while循环内部)。您不重置它,因此下一个测试将无效值放入矩阵。您的问题被标记为“c++”,因此您不需要说“语言:c++”,我也不明白你想要什么。无论如何,你的代码有很多问题,比如不必要的变量和计算,当A和B不能容纳超过10行10列时,你似乎允许R和C超过10行。很好地知道:)你可以接受我的答案,这样你的问题就不会再被列为未回答的问题了。