思路:模拟题主要就是找规律吧
代码如下:
codevs1160 :
#include<iostream>
#include<cstring>
#define right 1
#define up 2
#define left 3
#define down 4
using namespace std;
int n;
int m = 1;
int a[100][100];
int dir = right;
int x ,y ;
void go()
{
if(dir == right)
{
a[x][++y] = ++m;
}
else if(dir == up)
{
a[--x][y] = ++m;
}
else if(dir == left)
{
a[x][--y] = ++m;
}
else if(dir == down)
{
a[++x][y] = ++m;
}
}
int main()
{
cin >> n;
x = n/2;
y = n/2;
memset(a,0,sizeof(a));
a[x][y] = 1;
while(m < n*n)
{
go();
if(dir == right&&!a[x-1][y])
{
dir = up;
}
else if(dir == up&&!a[x][y-1])
{
dir = left;
}
else if(dir == left&&!a[x+1][y])
{
dir = down;
}
else if(dir == down&&!a[x][y+1])
{
dir = right;
}
}
int sum = 0;
for(int i = 0;i < n;i++)
{
for(int j = 0;j < n;j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
for(int i = 0;i < n;i++)
{
sum += a[i][i]+a[i][n-i-1];
}
sum -= 1;
cout << sum;
return 0;
}
#include<iostream>
#define right 1
#define right_up 2
#define left_down 3
#define down 4
using namespace std;
int x = 1,y = 1;
int dir = right;
void go(int dir)
{
if(dir == right)y++;
else if(dir == right_up){
x--;
y++;
}
else if(dir == down) x++;
else if(dir == left_down)
{
y--;
x++;
}
}
int main()
{
int n;
cin >> n;
while(--n)
{
go(dir);
if(x==1&&dir == right_up)
{
dir = right;
}
else if(x == 1&&dir == right)
{
dir = left_down;
}
else if(y == 1&& dir == left_down)
{
dir = down;
}
else if(y == 1&& dir == down)
{
dir = right_up;
}
}
cout << x << "/" << y;
return 0;
}