codevs1083+codevs1160 模拟

来源:互联网 发布:淘宝大学认证 编辑:程序博客网 时间:2024/06/03 05:39

题目:codevs1160 codevs1083


思路:模拟题主要就是找规律吧

代码如下:

codevs1160 :

#include<iostream>#include<cstring>#define right 1#define up 2#define left 3#define down 4using 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;}


codevs1083:

#include<iostream>#define right 1#define right_up 2#define left_down 3#define down 4using 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; } 



原创粉丝点击