zoukankan      html  css  js  c++  java
  • 蛇形填充

    蛇形填充

     1 //局限性:由于编译框显示限制,只能实现1-20的功能 
     2 #include <iostream>
     3 #include <string.h>
     4 using namespace  std;
     5 #define MAXN 20
     6 int a[MAXN][MAXN];
     7 
     8 int main(){
     9     int n,x,y,tot=0;
    10     cout<<"请输入一个不大于20的正整数"<<endl; 
    11     cin>>n;
    12     memset(a,0,sizeof(a));//将已开辟内存空间a的首sizeof(a)个字节的值设为值0。
    13                           //函数原型为:void *memset(void *s,int c,size_t n)    
    14     tot=a[x=0][y=n-1]=1;
    15     
    16     while(tot<n*n){
    17         while(x+1<n&&!a[x+1][y]) a[++x][y]=++tot;
    18             //精彩之处在于while循环的设置,还有判断是否为0的操作至关重要,
    19             //这里的设置完全遵循了 “蛇形填充”的过程 
    20         while(y-1>=0&&!a[x][y-1]) a[x][--y]=++tot;
    21         while(x-1>=0&&!a[x-1][y]) a[--x][y]=++tot;
    22         while(y+1<n&&!a[x][y+1]) a[x][++y]=++tot;
    23     }    
    24     
    25     for(x=0;x<n;++x){
    26         for(y=0;y<n;++y){
    27             printf("%4d",a[x][y]);//  a[x][y];
    28         }
    29         cout<<endl;
    30     }
    31     
    32 }
    33  

    另一个方法(其实大同小异):

     1 #include <stdio.h> 
     2 #include <stdlib.h>
     3 
     4 int main(){
     5     int i=0;
     6     int j=0;
     7     int k=0;
     8     int data[20][20]={0};
     9     int count=0;
    10     int N=0;
    11     printf("请输入一个整型数字:
    ");
    12     scanf("%d",&N);
    13     
    14     for(k=0;k<N/2;k++){        //共有N/2圈循环,由外及里赋值  
    15         for(i=k;i<N-k;i++){    //未赋值的最上层 
    16             data[k][i]=++count;
    17         }
    18         for(i=k+1;i<N-k;i++){  //未赋值的最右侧   +1是因为上面的for循环已经赋值了一层 
    19             data[i][N-k-1]=++count;
    20         }
    21         for(i=N-k-2;i>k;i--){  //未赋值的最下层   一共N-1层,N-1-k,k是变量,代表第几圈  
    22             data[N-k-1][i]=++count;
    23         }
    24         for(i=N-k-1;i>k;i--){
    25             data[i][k]=++count;//未赋值的最左侧    
    26         }
    27     } 
    28     
    29     if(N%2!=0){                //解决上面 k<N/2 遗漏的部分 
    30         data[N/2][N/2]=N*N;
    31     }
    32     for(i=0;i<N;i++){
    33         for(j=0;j<N;j++){
    34             printf("%3d",data[i][j]);
    35         }
    36         printf("
    ");
    37     }
    38     system("pause");
    39     return 0;
    40 }
  • 相关阅读:
    .linearDrag on rigidbody / rigidbody2D in code?
    Unity5权威讲解+项目源码+MP4
    C#的扩展方法解说
    use crunch compression
    IIS服务命令
    使用批处理打开控制面板中的功能
    一次性在一个文件夹里建立多个文件夹
    bat 批处理切换到当前脚本所在文件夹
    %date~0,4%和 %time~0,2%等用法详解(转)
    DOS批处理高级教程(还不错)(转)
  • 原文地址:https://www.cnblogs.com/liugl7/p/4821915.html
Copyright © 2011-2022 走看看