首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个算法解决方法

2013-01-02 
一个算法求一个三行三列的转置矩阵。输入第一行一个整数n20,表示有n组测试数据,下面是n组数据 每组测试数

一个算法
求一个三行三列的转置矩阵。
输入第一行一个整数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;
}

热点排行