题目链接: hdu2153
大水题,简单模拟,数据范围也很小,要是有耐心甚至可以直接写出所有情况吧。 易得一共会有sum=4*(n-1) 个数字
用int数组存储数字位置,下标从1开始。
残影过程: 先是往右跑,到j==n的时候转弯变成向下跑,跑到i == n时,往左跑 ,最后往上跑完一圈.
这题最关键在 输出格式,题目要求每个残影的计数位长度为3个字符长度,查了一下用 printf(%3d",x) 就可以实现
可以直接测完十个样例23333333
AC代码
#include<bits/stdc++.h>
using namespace std;
int mp[50][50];
int main(){
int n;
while(scanf("%d",&n)){
if(n==0) break;
memset(mp,0,sizeof(mp));
int sum=4*(n-1);
int cnt=1;
int i=1,j=1;
if(n==1){
printf("%3d\n",n);
}
while(cnt<=sum){
mp[i][j]=cnt++;
if(i==1&&j<n) j++;
else if(j==n&&i<n) i++;
else if(i==n&&j>1) j--;
else i--;
}
for(int x=1;x<=n;x++){
for(int y=1;y<=n;y++){
if(mp[x][y]) printf("%3d",mp[x][y]);
else cout<<" ";
}
cout<<endl;
}
}
}
ummmm代码还是比较傻,看了看其他题解的简洁程度,继续努力叭(害