#include <stdio.h>
int main(){
int n,j,i,k;//n是一个奇数
char x,q,a[1000][1000];
scanf("%d %c",&n,&x);
if(n%2!=0&&((64<x&&x<91)||(96<x&&x<123))){
if(96<x&&x<123)x-=32;
if(n==1)printf("%c\n",x);
else{
for(j=2;j<=n-1;j+=2){
for(i=2;i<=n-1;i++)a[i][j]=' ';
}
for(j=1;j<=n;j++){
a[1][j]=65+(x-1-65+j)%26;
}
for(j=1;j<=n;j+=2){
for(i=2;i<=n;i++){
a[i][j]=65+(a[1][j]-1-65+i)%26;
}
}
for(j=1;j<=n;j++){
a[n][j]=65+(a[n][1]-1-65+j)%26;
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)printf("%c",a[i][j]);
printf("\n");
}
}
}
else printf("Input error!\n");
return 0;
}
#include <stdio.h>
int main(){
int n,j,i,k;//n是一个奇数
char x,q,a[1000][1000];
scanf("%d %c",&n,&x);
if(n%2!=0&&((64<x&&x<91)||(96<x&&x<123))){
if(96<x&&x<123)x-=32;
if(n==1)printf("%c\n",x);
else{
for(j=1;j<=n;j++)a[1][j]=65+(x-1-65+j)%26;
for(i=2;i<=n;i++){
a[i][1]=65+(x-1-65+i)%26;
a[i][(n+1)/2]=65+(a[1][(n+1)/2]-1-65+i)%26;
a[i][n]=65+(a[1][n]-1-65+i)%26;
}
for(j=2;j<=n;j++)a[n][j]=65+(a[n][1]-1-65+j)%26;
}
for(i=1;i<=n;i++){
for(j=1;j<=n;j++)printf("%c",a[i][j]);
printf("\n");
}
}
else printf("Input error!\n");
return 0;
}
#include <stdio.h>
int main(){
int n,j,i,k;//n是一个奇数
char x;
scanf("%d %c",&n,&x);
if(n%2!=0&&((64<x&&x<91)||(96<x&&x<123))){
if(96<x&&x<123)x-=32;
if(n==1)printf("%c\n",x);
else{
for(i=1;i<=n;i++){
printf("%c",65+(x-1-65+i)%26);
}
printf("\n");
for(i=2;i<=n-1;i++){
printf("%c",65+(x-1-65+i)%26);
for(j=1;j<=(n-3)/2;j++)printf(" ");
printf("%c",65+(x-1-65+i+(n-1)/2)%26);
for(j=1;j<=(n-3)/2;j++)printf(" ");
printf("%c\n",65+(x-1-65+i+n-1)%26);
}
for(i=1;i<=n;i++){
printf("%c",65+(x+n-1-1-65+i)%26);
}
printf("\n");
}
}
else printf("Input error!\n");
return 0;
}
本题可谓真正的一波三折,题目没有描述清楚,第一版本是奇数列有字母,问题:手抖把i敲成j等等多想几秒就能避免的问题时有发生,很不应该;
发现不过,第二版本是数组版本的中间列有字母,有一个没过,不知为何,可能是数组越界;
第三版本是最基础的循环,一遍过,很快就写完了,也没出什么错误。