for循环打印之利用二维数组储存数据
一,杨辉三角
1,组合数性质之这世界总有人是例外
领导想在30人的班级里选10个人,然而,有一个是例外,刚开始这人家徒四壁,被淘汰了,于是c(30,10)就变成了c(29,10)
第二天,这人中彩票了,于是他就被内定了,于是就变成了c(29,9)。对于所有人来讲,这两种选择都是不公平的,但根据分类加法计数原理,
这两情况加起来就包含了所有情况,即c(30,10)=c(29,10)+c(29,9),the end。
int i, j, n; while (scanf("%d", &n) != EOF) { for (i = 1; i <= n; i++) { for (j = 1; j <= i; j++) { if (i == 1 && j == 1) { a[i][j] = 1; printf("1"); } else { a[i][j] = a[i - 1][j - 1] + a[i - 1][j]; printf("%-5d", a[i][j]); } } printf("\n"); } printf("\n"); }
2,当然也可以直接用公式,不但省时间,而且省空间
int s = 1, h; int i, j; while (scanf("%d", &h) != EOF) { printf("1\n"); for (i = 2; i <= h; s = 1, i++) //少了第一行 所以 i从2开始 { printf("1"); for (j = 1; j <= i - 2; j++) // 少了第一个和最后一个 所以减2 printf(" %d", (s = (i - j) * s / j)); //组合数 累乘和累除 //除法要放最后面 才可以保证整除 printf(" 1\n"); } }
二,可以一笔画填数的
1,回形填数
1 16 15 14 13
2 17 24 23 12
3 18 25 22 11
4 19 20 21 10
5 6 7 8 9
while (scanf("%d", &n) != EOF) { memset(a, 0, sizeof(a)); int num = 1, x = 0, y = 0; a[0][0] = 1; while (num < n*n) // 结束循环条件是 num==n*n { while (x+1 < n&&a[x + 1][y] == 0) //试探下一个可不可以 a[++x][y] = ++num; while (y+1 < n&&a[x][y+1] == 0) a[x][++y] = ++num; while (x - 1 >= 0 && a[x - 1][y] == 0) a[--x][y] = ++num; while (y - 1 >= 0 && a[x][y - 1] == 0) a[x][--y] = ++num; } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { printf("%3d", a[i][j]); } printf("\n"); } printf("\n");
}
2,蛇形填数
0 0 0 0 0 0 0
0 1 3 4 10 11 0
0 2 5 9 12 19 0
0 6 8 13 18 20 0
0 7 14 17 21 24 0
0 15 16 22 23 25 0
0 0 0 0 0 0 0
while (scanf("%d", &n) != EOF) { memset(a, 0, sizeof(a)); int x = 1, y = 1, num = 1; a[1][1] = 1; while (num < n*n) { while (x + 1 <= n&&y - 1 >= 1) a[++x][--y] = ++num; if (n == x) //这里判断的是在左上三角形还是右下三角形,两者路线有差别 x++; else a[++x][y] = ++num;
while (x - 1 >= 1 && y + 1 <= n) a[--x][++y] = ++num; if (n == y) y++; else a[x][++y] = ++num; } for (int i = 0; i <= n+1; i++) { for (int j = 0; j <= n+1; j++) { printf("%3d", a[i][j]); } printf("\n"); } printf("\n"); }
这是移动路径。
========== ========== ======= ====== ====== ===== ==== === == =
你背不下来的书 总有人能背下来
你做不出来的题 总有人能做出来
你愿意拖到明天的事 总有人今天努力做完
那么不好意思
你想去的学校也只能别人去了
你想过的人生也只能别人过了