列表

详情


NC219027. 螺旋矩阵

描述

将给出的字符串按照以下的格式输出:

输入描述

第一行一个正整数 ,表示测试数据的组数。

每组测试数据在一行中给出一个长度不超过的字符串
字符串只包含可见字符

输出描述

按格式输出字符矩阵,然后输出一个空行

字符串行末不要有额外空格,行首空格

示例1

输入:

4
TellMeHowEarnMoney
QWERTYUIOP
poiuytrewqasdfg
WhatsYou

输出:

enoMn
yMllr
 eTea
 HowE

TRE
YQW
UIOP

 gfd
yuis
tpoa
rewq

sta
YWh
ou 

原站题解

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

C 解法, 执行用时: 7ms, 内存消耗: 1060K, 提交时间: 2021-05-19 14:33:59

#include<stdio.h>
char a[100][100]={0};
char s[10000];
int dx[5]={1,0,-1,0};
int dy[5]={0,-1,0,1};
int main()
{
	int i,j,k,l,n,m,p,q,t,shang,xia,zuo,you;
	scanf("%d",&t);
	while(t--){
		shang=50;xia=50;zuo=50;you=50;
		for(i=0;i<100;i++)
		for(j=0;j<100;j++)a[i][j]=0;
		scanf("%s",s);
		p=0;i=1;n=50;m=50;a[50][50]=s[0];
		while(s[i]!='\0'){
			for(j=0;j<(p+2)/2&&s[i]!='\0';j++){
			n+=dy[p%4];m+=dx[p%4];
		    a[n][m]=s[i++];
		    if(n>xia)xia=n;if(n<shang)shang=n;if(m>you)you=m;if(m<zuo)zuo=m;//确定边界 
		}
		p++;
		}
		if(a[shang][zuo]==0)
		for(i=zuo;a[shang][i]==0;i++)a[shang][i]=' ';
		if(a[xia][you]==0)
		for(i=you;a[xia][i]==0;i--)a[xia][i]=' ';
		for(i=shang;i<=xia;i++){
		if(a[i][zuo]==0)a[i][zuo]=' ';
		if(a[i][you]==0)a[i][you]=' ';}
		for(i=shang;i<=xia;i++){
		for(j=zuo;j<=you;j++)printf("%c",a[i][j]);printf("\n");}
		printf("\n");
	}
}

C++(clang++11) 解法, 执行用时: 8ms, 内存消耗: 1172K, 提交时间: 2021-03-31 13:37:20

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
char a[N];
int n;
int dx[4]={0,-1,0,1};
int dy[4]={-1,0,1,0};
char ans[200][200];
void solve(){
	scanf("%s",a+1);
	int len=strlen(a+1);
	n=sqrt(len);
	while(n*n<len)n++;
	for(int i=len+1;i<=n*n;i++)a[i]=' ';
	//reverse(a+1,a+1+n*n);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			ans[i][j]='$';
		}
	}
	int to=0;
	int x=n,y=n;
	if(n%2==0){
		x=1,y=1,to=2;
	}
	int cnt=n*n;
	while(cnt--){
		ans[x][y]=a[cnt+1];
		if(ans[x+dx[to]][y+dy[to]]!='$'){
			to=(to+1)%4;
		}
		x+=dx[to],y+=dy[to];
	}
	for(int i=1;i<=n;i++){
		int k=n;while(ans[i][k]==' ')k--;
		if(k==0)continue;
		for(int j=1;j<=k;j++){
			printf("%c",ans[i][j]);
		}
		printf("\n");
	}
	printf("\n");
}
int main(){
	int t;
	cin>>t;
	while(t--){
		solve();
	}
} 

上一题