1.五本新书,借给三个不同的人,有几种借法?
本问题实际上是一个排列问题,即求从5个中取3个进行排列的方法的总数。首先对五本书从1至5进行编号,然后使用穷举的方法,假设三个人分别借这五本书中的一本,当三个人所借的书的编号都不相同时,就是满足题意的一种借阅方法。
#include<stdio.h>
int main()
{
int a,b,c,i=0;
for(a = 1; a <= 5; a++)
{
for(b = 1; b <= 5; b++)
{
for(c = 1; c <= 5; c++)
{
if(c != a&&a != b&&b != c)
{
i++;
printf("%d:",i);
printf("%d %d %d ",a,b,c);
if(i>4&&i%5==0)
printf("\n");
}
}
}
}
return 0;
}
2.杨辉三角
杨辉三角形中的数,正是(x+y)的N次方幂展开式中各项的系数。本题作为程序设计中具有代表性的题目,求解的方法很多,这里给出一种。
从杨辉三角形的特点出发,可以总结出:
1.第N行有N+1个值(设起始行为第0行);2.对于第N行的第J个值: (N> = 2)
当J=1或J=N+1时: 其值为1;
当J! =1且J! =N+1时: 其值为第N-1行的第J-1个值与第N-1行第J个值之和;
其它本程序就是根据以上递归的数学表达式编制的。
#include<stdio.h>
int main()
{
int i,j,n=13;
printf("N=");
scanf("%d",&n);
for(i = 0; i <= n; i++)
{
for(j = 0; j < n-i; j++)
{
printf(" ");
}
for(j = 1; j < i+2; j++)
{
printf("%6d",c(i,j));
}
printf("\n");
}
return 0;
}
int c(int x,int y)
{
int z;
if((y == 1)||(y == (x+1)))
return 1;
z = c(x-1,y-1)+c(x-1,y);
return (z);
}