读书人

一个算法解决方法

发布时间: 2013-01-02 13:08:44 作者: rapoo

一个算法
求一个三行三列的转置矩阵。
输入第一行一个整数n<20,表示有n组测试数据,下面是n组数据;
每组测试数据是九个整型数(每个数都不大于10000),分别为矩阵的的每项;
输出每组测试数据的转置矩阵;
请在每组输出之后加一个换行
样例输入2
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9 1
样例输出
1 4 7
2 5 8
3 6 9

2 5 8
3 6 9
4 7 1


我只会转置的算法,别的不知道怎么编写,如输入n组数据和输出怎么编

[解决办法]
还是新手乐园的问题好回答一个算法解决方法


#include <stdio.h>

int main()
{
int a[3][3],n,i,j;
scanf("%d",&n);
while(n--)
{
for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
for(j=0;j<3;j++)
{
for(i=0;i<3;i++)
printf("%d ",a[i][j]);
printf("\n");
}
}
}

[解决办法]

#include <stdio.h>

void trans(int a[], int n)
{
int i, j;
int tmp;

for(i = 0; i < n; i++)
for(j = 0; j < i; j++)
{
tmp = a[i * n + j];
a[i * n + j] = a[j * n + i];
a[j * n + i] = tmp;
}
}

void print(int a[], int n)
{
int i, j;
int tmp;

printf("\n");
for(i = 0; i < n; i++)
{
for(j = 0; j < n; j++)
printf("%d ", a[i * n + j]);
printf("\n");
}
}

int main(int argc, char* argv[])
{
int a[3][3];
int n, k;
int i, j;

scanf("%d", &n);
for(k = 0; k < n; k++)
{
for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++)
{
scanf("%d", &a[i][j]);
}
trans(&a[0][0], 3);
print(&a[0][0], 3);
}

return 0;
}

读书人网 >C++

热点推荐