`
ldb2741
  • 浏览: 31912 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

ACM 蛇形阵

阅读更多

花了一个早晨,做了一道同济大学的ACM题目,题目是:
蛇行矩阵
Problem
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。

Input
本题有多组数据,每组数据由一个正整数N组成。(N不大于100)

Output
对于每一组数据,输出一个N行的蛇形矩阵。两组输出之间不要额外的空行。

矩阵三角中同一行的数字用一个空格分开。行尾不要多余的空格。

Sample Input
5

Sample Output
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11

起初就觉得奇怪,好象蛇行阵不是这样的,管它了,能做就行,可是做这种数学题那真是累,现在越来越觉得自己的数学是那么的烂啊,郁闷!~``~~~`
但还是“艰难”地完成了:

#include
int main()
{
int a[20][20];
int i,n,m,x,y,num=1;
printf("input n:\n");
scanf("%d",&n);
for(i=1;i<=n;i++) //将数字赋给二维数组
{
x=i;y=1;
for(int count=1;count<=i;count++)
{
a[x][y]=num;
num++;
x--;
y++;
}
}
for(x=1;x<=n;x++) //打印数组
{
for(y=1;y<=n-x+1;y++)
printf("%d ",a[x][y]);
printf("\n");

}
return 0;
}

可是没想到代码原来这么简单,就是FOR循环这里害我半天转不过弯来。早晨起来又看到一道题:

矩阵中填数. 当给出 N*N 的矩阵,要求用程序填入下列形式的数:
// ① 倒填,例如N=5 ② 蛇形填数 ③ 回转填数
//
// ┌─┬─┬─┬─┬─┐ ┌─┬─┬─┬─┬─┐ ┌─┬─┬─┬─┬─┐
// │25│24│23│22│21│ │ 1│ 3│ 4│10│11│ │ 1│16│15│14│13│
// ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤
// │20│19│18│17│16│ │ 2│ 5│ 9│12│19│ │ 2│17│24│23│12│
// ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤
// │15│14│13│12│11│ │ 6│ 8│13│18│20│ │ 3│18│25│22│11│
// ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤
// │10│ 9│ 8│ 7│ 6│ │ 7│14│17│21│24│ │ 4│19│20│21│10│
// ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤
// │ 5│ 4│ 3│ 2│ 1│ │15│16│22│23│25│ │ 5│ 6│ 7│ 8│ 9│
// └─┴─┴─┴─┴─┘ └─┴─┴─┴─┴─┘ └─┴─┴─┴─┴─┘

挖靠!中间这道才是我以前见过的地地道道的蛇行阵,前面的就不说了,中间的这道比我上面做的那道就是拐了个弯而已,环绕方向变了,而上面的这道是同个方向,但是我还是绞尽脑汁做了出来:
#include
int main()
{
int a[20][20];
int i,n,m,x,y,num=1;
printf("input n:\n");
scanf("%d",&n);

for(i=1;i<=n;i++) //将数字赋给蛇形阵的上三角
{
if(i%2==1)
{
x=1;
y=i;
for(int count=1;count<=i;count++)
{
a[x][y]=num;
num++;
x++;
y--;
}
}
else
{
x=i;
y=1;
for(int count=1;count<=i;count++)
{
a[x][y]=num;
num++;
x--;
y++;
}
}
}
num=n*n;
for(i=n;i>1;i--) //将数字赋给蛇形阵的下三角
{
if(i%2==1)
{
x=n;
y=i;
for(int count=1;count<=n+1-i;count++)
{
a[x][y]=num;
num--;
x--;
y++;
}
}
else
{
x=i;
y=n;
for(int count=1;count<=n+1-i;count++)
{
a[x][y]=num;
num--;
x++;
y--;
}
}
}

for(x=1;x<=n;x++) //打印数组
{
for(y=1;y<=n;y++)
printf("%d ",a[x][y]);
printf("\n");
}
return 0;
}

说真的,看到这些嵌套的循环头都大了,即使是自己做的,答案也对了,都不想回过头去再看一遍啊,我已经死了不少脑细胞了~~~~`

下学期就学数据结构了,这门课非常重要的,因为它讲究的是思想和考虑问题的角度,对任何一们语言都是适用的,现在好好努力了,同过上面几道所谓的ACM题(其实没那么简单吧)可以看出自己的数学和算法真的很弱啊,只有继续做题了,会慢慢积累的...

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics