输入的第一行包括一个整数N,(1<=N<=100),代表矩阵的维数。 接下来的N行每行有N个整数,分别代表矩阵的元素。
可能有多组测试数据,对于每组数据,将输入的矩阵转置后输出。
3 1 2 3 4 5 6 7 8 9
1 4 7 2 5 8 3 6 9
#include <cstdio> const int N = 100; void swap(int *a, int *b) { int t = *a; *a = *b; *b = t; } int main() { int matrix[N][N]; int n; while (scanf("%d", &n) != EOF) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { scanf("%d", &matrix[i][j]); } } for (int i = 0; i < n; i++) { for (int j = 0; j < i; j++) { swap(&matrix[i][j], &matrix[j][i]); } } for (int i = 0; i < n; i++) { for (int j = 0; j < n - 1; j++) { printf("%d ", matrix[i][j]); } printf("%d\n", matrix[i][n - 1]); } } }
#include <stdio.h> int main() { int n,i,j,t; while(scanf("%d",&n)!=EOF) { int a[n][n]; for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&a[i][j]); for(i=0;i<n;i++) { for(j=i+1;j<n;j++) { t=a[i][j]; a[i][j]=a[j][i]; a[j][i]=t; } } for(i=0;i<n;i++) { for(j=0;j<n;j++) { printf("%d ",a[i][j]); } printf("\n"); } } }
#include<stdio.h>//直接看对称a[i][j]与a[j][i]直接交换 int main() { int n,a[100][100],i,j,t; scanf("%d",&n); for(i=0;i<n;i++)//输入 for(j=0;j<n;j++) scanf("%d",&a[i][j]); for(i=0;i<n;i++)//交换 for(j=i+1;j<n;j++)//上三角 { t=a[i][j];a[i][j]=a[j][i];a[j][i]=t; } for(i=0;i<n;i++)//输出 { for(j=0;j<n;j++) printf("%d ",a[i][j]); printf("\n"); } }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int[][] matrix = new int[n][n]; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) matrix[j][i] = scanner.nextInt(); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) System.out.print(matrix[i][j] + " "); System.out.println(); } } }
#include <iostream>
using namespace std ;
int main() {
int N;
int x,y;
int i;
int *p = NULL ;
while ( scanf ( "%d" ,&N) == 1 ) {
if (N > 100 || N < 1 ) {
continue ;
}
p = ( int *) malloc ( sizeof ( int ) * N * N);
// x 为余数, y 为商
for (i = 0 ; i < N * N; i++) {
cin >> *(p+i);
}
for (i = 0 ; i < N * N; i++) {
x = i % N;
y = i / N;
cout << *(p+x*N+y);
if (x == N- 1 ) {
cout << '\n' ;
}
else {
cout << ' ' ;
}
}
}
return 0 ;
}
#include <stdio.h> int main(){ int N; while(~scanf("%d",&N)){ int m[100][100]; for(int i = 0; i < N; ++i) for(int j = 0; j < N; ++j) scanf("%d",&m[i][j]); for(int i = 0; i < N; ++i){ for(int j = 0; j < N; ++j){ printf("%d",m[j][i]); if(j==N-1) printf("\n"); else printf(" "); } } } return 222; }
//注意交换的时候只需要对上/下三角操作即可,否则交换两次回到原地,不过那个直接输出的也是很秀 #include<iostream> using namespace std; int main(){ int n; while(cin>>n){ int **a=new int*[n]; for(int i=0;i<n;i++) a[i]=new int[n]; for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>a[i][j]; for(int i=0;i<n;i++) for(int j=i;j<n;j++){ int temp=a[i][j]; a[i][j]=a[j][i]; a[j][i]=temp; } for(int i=0;i<n;i++){ for(int j=0;j<n-1;j++) cout<<a[i][j]<<" "; cout<<a[i][n-1]<<endl; } } }
//我一直以为不用数组就是没有数组出现,为什么别人的代码都有一个二维数组--> _ -->
#include<bits/stdc++.h> using namespace std; int main() { int n,a; while(cin>>n) { string s; char c='a'; for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { cin>>a; if(n==1) break; string temp; while(a) { temp+=a%10+'0'; a/=10; } reverse(temp.begin(),temp.end()); s+=temp; s+=c; } } if(n==1) { cout<<a<<endl; continue; } int j=0; int k=1,num=0; int len=s.size(); for(int i=0; i<len; i++) { string temp; while(i<len&&s[i]!='a') temp+=s[i],i++; if(s[i]=='a') j++; if(j%n==k) { cout<<temp<<" "; num++; } if(num==n) { num=0; j=0; cout<<endl; i=-1; if(k==0) break; k=(k+1)%n; } } } return 0; }
#include <iostream> #include<stdio.h> #include<string.h> using namespace std; int buf[105][105]; int main() { int N; while(scanf("%d",&N)!=EOF) { for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { cin>>buf[i][j]; } } for(int i=0;i<N;i++) { for(int j=0;j<i;j++)//注意只要遍历下或上三角即可 { int t = buf[i][j]; buf[i][j] = buf[j][i]; buf[j][i] = t;//交换下标数据 } } for(int i=0;i<N;i++)//输出要注意格式 { for(int j=0;j<N;j++) { if(j==0) cout<<buf[i][j]; else cout<<" "<<buf[i][j]; } cout<<endl; } } return 0; }
#include<iostream> #include<cstdio> using namespace std; int main(){ int n,a[100][100]; cin>>n; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cin>>a[i][j]; } } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cout<<a[j][i]<<" "; } cout<<endl; } }
#include<iostream> using namespace std; int main() { int a[100][100], n; while (cin >> n) { for (int i = 0; i < n; i++)//输入矩阵 { for (int j = 0; j < n; j++) { cin >> a[i][j]; } } for (int i = 0; i < n; i++)//转置 { for (int j = 0; j < i; j++) { int t = a[i][j]; a[i][j] = a[j][i]; a[j][i] = t; } } for (int i = 0; i < n; i++)//输出 { for (int j = 0; j < n; j++) { if (j != n - 1) { cout << a[i][j] << " "; } else cout << a[i][j] << endl; } } } return 0; }
#include <array> #include <iostream> using namespace std; const int MAXN = 101; array<array<int, MAXN>, MAXN>matrix; int main() { int n; while (cin >> n) { for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { cin >> matrix[i][j]; } } for (int i = 1; i <= n; i++) { for (int j = i + 1; j <= n; j++) { swap(matrix[i][j], matrix[j][i]); } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { cout << matrix[i][j] << " "; } cout << endl; } } return 0; }
#include <iostream> using namespace std; //交换 void swap(int *a,int *b) { int temp = *a; *a = *b; *b = temp; } int main() { int n = 0; cin >> n; int arr[100][100]; // 输入: for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cin >> arr[i][j]; } } // 遍历矩阵的上三角 for (int i = 0; i < n; i++) { //行 for (int j = i; j < n; j++) { //交换arr[i][j]和arr[j][i]; swap(&arr[i][j],&arr[j][i]); } } // 打印 for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << arr[i][j] << " "; } cout << endl; } }
在输入时就将转置后的数据填入数组;但据题意正确做法应该是源数据填入数组后将元素Aij与元素Aji交换位置(i≠j) #include <iostream> #include <vector> using namespace std; int main() { int n=0; cin>>n; vector<vector<int>>matrix(n,vector<int>(n,0)); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ int num=0; cin>>num; matrix[j][i]=num; } } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ cout<<matrix[i][j]<<" "; } cout<<endl; } } // 64 位输出请用 printf("%lld")