NYOJ——33 蛇形填数

来源:互联网 发布:生态科技成大数据企业 编辑:程序博客网 时间:2024/05/22 01:51

蛇形填数

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入
直接输入方陈的维数,即n的值。(n<=100)
输出
输出结果是蛇形方陈。
样例输入
3
样例输出
7 8 16 9 25 4 3
被坑了,一组测试数据,算法经典上的代码直接复制过来了
#include<iostream>#include<stdio.h>#include<string.h>#include<math.h>#include<ctype.h>#include<stdlib.h>#include<string>#include<algorithm>#include<vector>#include<set>#include<map>#include<list>#include<queue>#include<stack>#include<iomanip>#include<numeric>#include <istream>     //基本输入流#include <ostream>     //基本输出流#include <sstream>     //基于字符串的流#include <utility>     //STL 通用模板类#include <complex.h>   //复数处理#include <fenv.h>    //浮点环境#include <inttypes.h>  //整数格式转换#include <stdbool.h>   //布尔环境#include <stdint.h>   //整型环境#include <tgmath.h>   //通用类型数学宏#define L(a,b,c) for(int a = b;a >= c;a --)#define M(a,b,c) for(int a = b;a < c;a ++)#define N(a,b) memset(a,b,sizeof(a));const int INF=1<<31;const int inf=-INF;typedef int T;typedef double D;typedef char C;using namespace std;int a[111][111],n;int main(){    int x,y;    scanf("%d",&n);    int t;    N(a,0)    t = 1;    a[x = 0][y = n-1] = 1;    for(;t<n*n;)    {        while(x + 1 < n && !a[x + 1][y])            a[++ x][y] = ++ t;        while(y - 1 >= 0 && !a[x][y - 1])            a[x][-- y] = ++ t;        while(x - 1 >= 0 && !a[x - 1][y])            a[-- x][y] = ++ t;        while(y + 1 < n && !a[x][y + 1])            a[x][++ y] = ++t;    }    M(i,0,n)    {        M(j,0,n)        printf("%d  ",a[i][j]);        printf("\n");    }}
0 0
原创粉丝点击