一、 输出杨辉三角
(声明下,有些代码是学习了别人的代码,然后我用自己的思维去详述,对于小白还是比较有用的)
1.先就题论题吧。就说咋打印出这个东西。先从简单的来。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
乍一看,每行的第一个元素是1,最后一个也是1。
从第二行开始,看到第二行的第一个(a21)和第二个(a22)加起来是第三行(a32)的值,1+1=2
第三行中,a31+a32=1+2=a42=3, a32+a33=2+1=a43=3,
所以得出
a[i][j]=a[i-1][j-1]+a[i-1][j];//由上一行得到下一行的,满足杨辉三角,a[i-1][j]是a[i][j]的同列上一行一个数,a[i-1][j-1]是a[i-1][j];的前一个数。
因为每行第一个元素为1,所以每次循环将它赋值为1
每行末尾的元素也为1,所以每次循环将[i][i]赋值为1
通过二维数组数组来存储每个元素,通过for循环来控制行数,直到完成二维数组的赋值
最后输出数组
#include <stdio.h>
#define N 10 //宏定义,表示N为10
void main()
{
int a[N][N],i,j;//整型数组a[N][N],变量i,j
for(i=0;i<N;i++)//循环,初始化i,当i<N时,执行循环,每次循环i++
{
a[i][0]=1; //每次循环,都相当于把数组的第一列的第一个数赋值为1
a[i][i]=1; //数组对角线上的多为1
for(j=1;j<i;j++)//循环,用以输出除了对角线,以及第一列的其他数
a[i][j]=a[i-1][j-1]+a[i-1][j];//由上一行得到下一行的,满足杨辉三角,a[i-1][j]是a[i][j]的同列上一行一个数,a[i-1][j-1]是a[i-1][j];的前一个数。
}
printf("杨辉三角的前%d行为:\n",N);
for(i=0;i<N;i++)//输出数组,即杨辉三角
{
for(j=0;j<=i;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
运行结果:
杨辉三角的前10行为:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
--------------------------------
2.上面这个还不算真正的杨辉三角。先来扯一段。
先从2次多项式来说,
它的未知数的系数为 1,2,1
再来看看,
它的系数为1,3,3,1
再来看看
它的系数为1,4,6,4,1
暂时得到 1 2 1
1 3 3 1
1 4 6 4 1
最终可以从这个推广得到二项式定理的公式。它俩算数形结合吧。
然后来搞这个杨辉三角。
依然有每行的第一项和最后一项是1,先把这种存入数组。
然后通过公式存入有规律的项
注意到每行前面有空格,在打印二维数组时,
第一行有4个空,第二行有3个空,第三行有2个空
第4行有1个空,第5行有0个空
所以得到 j = n - i - 1; j > 0; j--
二、约瑟夫生者死者小游戏
30 个人在一条船上,超载,需要 15 人下船。
于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。
如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?
#include<stdio.h>
int main(){
int count=0,//记录下船的人数 ,到15就终止程序
a[30]={0},//储存30人信息,0代表在船上,1代表下船了
i=0,//循环索引
c=0;// 记录报数号码,到9就清零,由下一位重新报数
while(1) {
if(a[i]==0)c++;//记录报数号码
if(c==9){
count++;//下船人数加一
a[i]=1; //标记这个人下船了
printf("第%d号下船了。\n",i+1);
c=0;//到9就清零,由下一位从0重新报数
}
if(count==15)break;//下船的人数到15就终止程序
i++;//分析下一个人
if(i==30)i=0; //将数组变成一个圈,循环往复
}
return 0;
}
第9号下船了。
第18号下船了。
第27号下船了。
第6号下船了。
第16号下船了。
第26号下船了。
第7号下船了。
第19号下船了。
第30号下船了。
第12号下船了。
第24号下船了。
第8号下船了。
第22号下船了。
第5号下船了。
第23号下船了。