软件大赛校内选拔赛题:蛇形填数
2012-12-05 16:36
316 查看
输入正整数N,比如:5
输出蛇形矩阵:1 3 4 10 11
2 5 9 12 19
6 8 13 18 20
7 14 17 21 20
15 16 22 27 25
#include<stdio.h>
int main()
{
int n,i,j,a[101][101],k=2,p;
i=1;j=1;a[i][j]=1;
scanf("%d",&n);
while(k<=n*n)
{
if(j==1||i==n)//向下、右方向填充
{
if(i<n)//没有达到下边界之前的情况
{
i++;//向下延伸一步,并标记为p=1,即已经完成延伸过程
a[i][j]=k++;
if(k==n*n+1) break;
p=1;
}
else
{
j++;//如果已经达到下边界,则不能再向下延伸而是向右延伸,并进行标记
a[i][j]=k++;
if(k==n*n+1) break;
p=1;
}
}
if(p==1)//延伸之后开始斜向填充
{
if(i<n)//没有达到下边界之前,每次斜向填充还可以到达上边界,故可以用来作为循环条件
{
while(i!=1)
{
i--;j++;
a[i][j]=k++;
if(k==n*n+1) break;
}
}
else//达到下边界之后的斜向填充不能再回到第一行,但是每次应该结束时都会达到右边界,故可以作为循环条件
{
while(j!=n)
{
i--;j++;
a[i][j]=k++;
if(k==n*n+1) break;
}
}
p=2;
}
if(i==1||j==n)//和上面过程对称的,方法基本一样
{
if(j<n)
{
j++;
a[i][j]=k++;
if(k==n*n+1) break;
p=2;
}
else
{
i++;
a[i][j]=k++;
if(k==n*n+1) break;
p=2;
}
}
if(p==2)
{
if(j<n)
{
while(j!=1)
{
i++;j--;
a[i][j]=k++;
if(k==n*n+1) break;
}
}
else
{
while(i!=n)
{
i++;j--;
a[i][j]=k++;
if(k==n*n+1) break;
}
}
p=1;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%d\t",a[i][j]);
printf("\n\n");
}
return 0;
}
输出蛇形矩阵:1 3 4 10 11
2 5 9 12 19
6 8 13 18 20
7 14 17 21 20
15 16 22 27 25
#include<stdio.h>
int main()
{
int n,i,j,a[101][101],k=2,p;
i=1;j=1;a[i][j]=1;
scanf("%d",&n);
while(k<=n*n)
{
if(j==1||i==n)//向下、右方向填充
{
if(i<n)//没有达到下边界之前的情况
{
i++;//向下延伸一步,并标记为p=1,即已经完成延伸过程
a[i][j]=k++;
if(k==n*n+1) break;
p=1;
}
else
{
j++;//如果已经达到下边界,则不能再向下延伸而是向右延伸,并进行标记
a[i][j]=k++;
if(k==n*n+1) break;
p=1;
}
}
if(p==1)//延伸之后开始斜向填充
{
if(i<n)//没有达到下边界之前,每次斜向填充还可以到达上边界,故可以用来作为循环条件
{
while(i!=1)
{
i--;j++;
a[i][j]=k++;
if(k==n*n+1) break;
}
}
else//达到下边界之后的斜向填充不能再回到第一行,但是每次应该结束时都会达到右边界,故可以作为循环条件
{
while(j!=n)
{
i--;j++;
a[i][j]=k++;
if(k==n*n+1) break;
}
}
p=2;
}
if(i==1||j==n)//和上面过程对称的,方法基本一样
{
if(j<n)
{
j++;
a[i][j]=k++;
if(k==n*n+1) break;
p=2;
}
else
{
i++;
a[i][j]=k++;
if(k==n*n+1) break;
p=2;
}
}
if(p==2)
{
if(j<n)
{
while(j!=1)
{
i++;j--;
a[i][j]=k++;
if(k==n*n+1) break;
}
}
else
{
while(i!=n)
{
i++;j--;
a[i][j]=k++;
if(k==n*n+1) break;
}
}
p=1;
}
}
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
printf("%d\t",a[i][j]);
printf("\n\n");
}
return 0;
}
相关文章推荐
- 第六届蓝桥杯大赛个人赛(软件类)校内选拔题目\Java大学B组\2题 调和级数
- 第六届蓝桥杯大赛个人赛(软件类)校内选拔题目\Java大学B组\3题 x的x次幂等于10
- 第六届蓝桥杯大赛个人赛(软件类)校内选拔题目X^X=10
- 第六届蓝桥杯大赛个人赛(软件类)校内选拔题目\Java大学B组\1题
- 第六届蓝桥杯大赛个人赛(软件类)校内选拔题目X^X=10
- 2012年软件大赛校内选拔赛
- 2015-年校内选拔-蓝桥杯C-(A组)赛题-圆周率pai
- 2012年软件大赛校内选拔赛
- 2015-年校内选拔-蓝桥杯C-(A组)赛题-x的x次幂结果为10
- 2015-年校内选拔-蓝桥杯C-(A组)赛题-dfs-7对数字
- 2015-年校内选拔-蓝桥杯C-(A组)赛题-dfs-数独
- XMUT第七届蓝桥杯全国软件和信息技术专业人才大赛校内选拔赛模拟赛
- 2015-年校内选拔-蓝桥杯C-(A组)赛题-最长公共子序列
- 2015-年校内选拔-蓝桥杯C-(A组)赛题-勾股定理
- CHD 2016校内选拔赛题解
- 天空软件10周年T恤创意大赛
- 校内小软件927
- 蓝桥杯校内选拔第四题
- 阿里云启动API创新大赛 资源编排技术为场景赛题
- 2017全国大学生软件测试大赛,火热开赛