nyoj33蛇形填数

   这道题当时第一眼见到的时候,感觉真的是一脸懵逼,真的不知道是怎么一回事,最后想了一下,不就是回环的进行填数吗,于是我就尝试用了很多while循环,于是就改了好久,终于AC了,这道题当然现在看,可能没有那么难,可是却实伤了脑细胞啊!!不说了,贴代码。

蛇形填数

时间限制: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 1
6 9 2
5 4 3

#include<iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    int a[n][n];
    int flag=1;//设置flag进行标记循环了几圈,
    int num1=0,num2;
    int i=0;
    int biaozhi=0;//找到推出的条件设置标志位
    while(1){
        num2=n-flag;//
        while(num1<=n-flag){
            i++;
            a[num1++][num2]=i;
                if(i==n*n){
            biaozhi=1;
            break;
            }
        }
        num1--;//多加的就要减下来
        num2--;
        if(biaozhi==1)break;    
        while(num2>=flag-1){    
            i++;
            a[num1][num2--]=i;
            if(i==n*n){
            biaozhi=1;
            break;
        }
        }    
        if(biaozhi==1)break;
        num2++;
        num1--;
        while(num1>=flag-1){
            i++;
            a[num1--][num2]=i;
            if(i==n*n){
            biaozhi=1;
            break;
            }
        }    
        if(biaozhi==1)break;
        num1++;
        num2++;
        while(num2<=n-flag-1){
            i++;
            a[num1][num2++]=i;
            if(i==n*n){
            biaozhi=1;
            break;
            }
           
        }    
        if(biaozhi==1)break;
        flag++;
        num2--;
        num1++;
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            cout<<a[i][j]<<" ";
        }
        cout<<endl;
    }
    return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值