C 一道杨辉三角题
题干: 输入一个数,输出对应层数的杨辉三角。
什么是杨辉三角:http://zh.wikipedia.org/wiki/杨辉三角形
作为一个逗逼……不小心让上次的斐波那契数列题的former
和later
走错片场于是……不用在意这些细节。
我的可悲的写法QvQ
1#include <stdio.h>
2
3int Yang(int num);
4
5int main(void)
6{
7 int num;
8
9 printf("请输入你要的层数: ");
10 scanf("%d", &num);
11 Yang(num);
12
13 return 0;
14}
15
16int Yang(int num)
17{
18 int i, j, k, array[num], result[num], former, later;
19
20 for (i = 1; i <= num; i++) {
21 array[0] = 1;
22 array[i - 1] = 1;
23 result[0] = 1;
24 result[i - 1] = 1;
25 for (j = 1; j < i - 1; j++) {
26 former = array[j - 1];
27 later = array[j];
28 result[j] = former + later;
29 }
30 for (k = 0; k < i; k++)
31 array[k] = result[k];
32 }
33
34 for (i = 0; i < num; i++)
35 printf("%-3d", result[i]);
36
37 return 0;
38}
39
不擅长用递归,于是就直接算吧……数组部分还没怎么学就这么混混咯,部分参考了一下上次的C 斐波那契数列题目两则,其实是两个数组传值运算。
相比之下师匠的方法显得高明得多,具体效率其实并不清楚谁快谁慢,递归嘛,本身效率就不高,不过代码简单。
1#include <stdio.h>
2
3int Yang(int row, int col)
4{
5 int len = row;
6 if (row == 1 || col == 1 || col == len)
7 return 1;
8 if (col > len)
9 return 0;
10 return Yang(row - 1, col - 1) + Yang(row - 1, col);
11}
12
13int main(void)
14{
15 int row, i;
16
17 scanf("%d", &row);
18
19 for (i = 1; i <= row; ++i)
20 printf("%d ", Yang(row, i));
21 printf("\n");
22
23 return 0;
24}
25
因为函数在main上面,所以声明和内容合并了 放在下面按照规定就得声明了QvQ好烦啦
递归的思路,关于递归,另开文章说。
评论 (0)