标签:
蛇形填充
1 //局限性:只能实现1-10的功能 2 #include <iostream> 3 #include <string.h> 4 using namespace std; 5 #define MAXN 10 6 int a[MAXN][MAXN]; 7 8 int main(){ 9 int n,x,y,tot=0; 10 cin>>n; 11 memset(a,0,sizeof(a));//将已开辟内存空间a的首sizeof(a)个字节的值设为值0。 12 //函数原型为:void *memset(void *s,int c,size_t n) 13 tot=a[x=0][y=n-1]=1; 14 15 while(tot<n*n){ 16 while(x+1<n&&!a[x+1][y]) a[++x][y]=++tot; 17 //精彩之处在于while循环的设置,还有判断是否为0的操作至关重要, 18 //这里的设置完全遵循了 “蛇形填充”的过程 19 while(y-1>=0&&!a[x][y-1]) a[x][--y]=++tot; 20 while(x-1>=0&&!a[x-1][y]) a[--x][y]=++tot; 21 while(y+1<n&&!a[x][y+1]) a[x][++y]=++tot; 22 } 23 24 for(x=0;x<n;++x){ 25 for(y=0;y<n;++y){ 26 cout<<a[x][y]<<" "; 27 } 28 cout<<endl; 29 } 30 31 } 32
下面是另一段描述:
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("请输入一个整型数字:\n"); 12 scanf("%d",&N); 13 14 for(k=0;k<N/2;k++){ 15 for(i=k;i<N-k;i++){ 16 data[k][i]=++count; 17 } 18 for(i=k+1;i<N-k;i++){ 19 data[i][N-k-1]=++count; 20 } 21 for(i=N-k-2;i>k;i--){ 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 if(N%2!=0){ 29 data[N/2][N/2]=N*N; 30 } 31 for(i=0;i<N;i++){ 32 for(j=0;j<N;j++){ 33 printf("%3d",data[i][j]); 34 } 35 printf("\n"); 36 } 37 system("pause"); 38 return 0; 39 }
标签:
原文地址:http://www.cnblogs.com/liugl7/p/4821915.html