/*蛇形填数1:S形矩阵填数*/
#include<stdio.h>
#define N 100
int map[N][N];
int main()
{
int i,j,k,n,flag,m;
while(scanf("%d",&n)!=EOF)
{
i=j=k=1;
m=n*(n+1)/2;
map[i][j]=k++;
while(1)
{
map[++i][j]=k++;
while(i!=1)
map[--i][++j]=k++;
if(k>=m)
{
flag=1;
break;
}
map[i][++j]=k++;
while(j!=1)
map[++i][--j]=k++;
if(k>=m)
{
flag=2;
break;
}
}
while(flag==1&&k<=n*n)
{
map[++i][j]=k++;
while(i!=n)
map[++i][--j]=k++;
if(k>=n*n) break;
map[i][++j]=k++;
while(j!=n)
map[--i][++j]=k++;
}
while(flag==2&&k<=n*n)
{
map[i][++j]=k++;
while(j!=n)
map[--i][++j]=k++;
map[++i][j]=k++;
while(i!=n)
map[++i][--j]=k++;
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%d ",map[i][j]);
printf("\n");
}
}
return 0;
}
实在是惭愧啊,刚看到同学写的S型蛇形填数的代码,相比之下真的是弱爆了!废话少说,献上代码:
#include<stdio.h> #include<stdlib.h> #define N 100 int a[N][N],n; int main() { int n,x,y,k; while(scanf("%d",&n)!=EOF) { x=y=k=0; a[x][y]=++k; while(k<n*n) { while(x+1<n&&y-1>=0)//x+1<n表示没有到向下越界,y-1>=0表示没有向左越界 a[++x][--y]=++k; if(x+1<n)//没有向下越界则往下走 a[++x][y]=++k; //else if(x+1==n&&y+1<n)//否则没有向右越界的话就向右走 else a[x][++y]=++k; while(x-1>=0&&y+1<n)//x-1>=0表示没有向上越界,y+1<n表示没有向右越界 a[--x][++y]=++k; if(y+1<n)//没有向右越界则向右走 a[x][++y]=++k; //else if(y+1==n&&x+1<n)//否则如果没有向下越界的话就向下走 else a[++x][y]=++k; } for(x=0;x<n;x++) { for(y=0;y<n;y++) printf("%d ",a[x][y]); printf("\n"); } } system("pause"); return 0; }
/*蛇形填数,螺旋形矩阵填数(从右上角开始顺时针填)*/
#include<stdio.h>
#define N 100
int map[N][N];
int main()
{
int a,b,n,k;
while(scanf("%d",&n)!=EOF)
{
for(a=0,k=1;a<=(n-1)/2;a++)
{
for(b=a;b<=n-a-1;b++)
map[b][n-a-1]=k++;
for(b=n-a-2;b>=a;b--)
map[n-a-1][b]=k++;
for(b=n-a-2;b>=a;b--)
map[b][a]=k++;
for(b=a+1;b<n-a-1;b++)
map[a][b]=k++;
}
for(a=0;a<n;a++)
{
for(b=0;b<n;b++)
printf("%d ",map[a][b]);
printf("\n");
}
}
system("pause");
return 0;
}/*蛇形填数:螺旋形矩阵填数(左上角开始顺时针填)*/
#include<stdio.h>
#define N 100
int map[N][N];
int main()
{
int x,y,n,k;
while(scanf("%d",&n)!=EOF)
{
for(x=0,k=1;x<=(n-1)/2;x++)
{
for(y=x;y<=n-x-1;y++)
map[x][y]=k++;
for(y=x+1;y<=n-x-1;y++)
map[y][n-x-1]=k++;
for(y=n-x-2;y>=x;y--)
map[n-x-1][y]=k++;
for(y=n-x-2;y>x;y--)
map[y][x]=k++;
}
for(x=0;x<n;x++)
{
for(y=0;y<n;y++)
printf("%d ",map[x][y]);
printf("\n");
}
}
system("pause");
return 0;
}
蓝桥杯上三角填数
代码:
#include<stdio.h>
#include<string.h>
#define N 25
int map[N][N];
int main() {
int n,k,x,y,i;
while(scanf("%d",&n)!=EOF) {
memset(map,0,sizeof(map));
for(i=0,k=1;i<(n-1)/2;i++){
for(x=i,y=i;y<n-2*i-1;y++)
map[x][y]=k++;
for(;y>i;x++,y--)
map[x][y]=k++;
for(;x>i;x--)
map[x][y]=k++;
}
for(x=0;x<n;x++){
for(y=0;y<=n-x-1;y++)
printf("%-4d",map[x][y]);
printf("\n");
}
}
return 0;
}