列表

详情


NC221786. dd爱旋转

描述

【题目描述】
读入一个的矩阵,对于一个矩阵有以下两种操作
:顺时针旋
:关于行镜像

变成
给出个操作,输出操作完的矩阵

输入描述

第一行一个数n(1≤n≤1000),表示矩阵大小
接下来n行,每行n个数,描述矩阵,其中数字范围为[1,2000]
一下来一行一个数q(1≤q≤100000),表示询问次数
接下来q行,每行一个数x(x=1或x=2),描述每次询问

输出描述

n行,每行n个数,描述操作后的矩阵

示例1

输入:

2
1 2
3 4
1
1

输出:

4 3
2 1

示例2

输入:

2
1 2
3 4
1
2

输出:

3 4
1 2

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 247ms, 内存消耗: 8504K, 提交时间: 2021-05-28 22:21:43

#include<stdio.h>
int main(){
	int n,i,j,x,p,y1=0,y2=0,y;
	scanf("%d",&n);
	int a[n][n];
	for(i=0;i<n;i++)
	for(j=0;j<n;j++)
	scanf("%d",&a[i][j]);
	scanf("%d",&y);
	for(i=0;i<y;i++){
		scanf("%d",&x);
		if(x==1){
			y1++;
		}
		else if(x==2){
			y2++;
		}
	}
	y1=y1%2;
	y2=y2%2;
	if(y2!=0){
	for(i=0;i<n/2;i++)
	for(j=0;j<n;j++){
		p=a[i][j];
		a[i][j]=a[n-1-i][j];
		a[n-1-i][j]=p;
	}
	}
	if(y1!=0){
	for(i=n-1;i>=0;i--){
	for(j=n-1;j>=0;j--){
	printf("%d ",a[i][j]);
	}
	printf("\n");
}

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

C++ 解法, 执行用时: 313ms, 内存消耗: 8832K, 提交时间: 2021-07-31 10:53:51

#include<bits/stdc++.h>
#define N 1000+5
using namespace std;
int mp[N][N],cnt1,cnt2,p,q,n;
int main()
{
	cin >> n;
	for(int i=1;i<=n;i++)
	for(int j=1;j<=n;j++)
	cin >> mp[i][j];
	cin >> p;
	for(int i=1;i<=p;i++)
	{
		cin >> q;
		if(q==1) cnt1++;
		else cnt2++;
	}
	cnt1%=2;
	cnt2%=2;
	for(int i=1;i<=n;i++)
	{
		int flag=0;
		for(int j=1;j<=n;j++)
		{
			cout << (flag ? " " : "");
			flag=1;
			cout << mp[abs(cnt2*(n+1)-abs(cnt1*(n+1)-i))][abs(cnt1*(n+1)-j)];
		}
		cout << "\n";
	}
}

上一题