编成题目求解
有两个题目,看似很简单。可是做起来却挺困难。题目如下:
1. 若一只母兔,从出生第4个年头开始每年生一头母兔,按此规律,第n年时有多少只母兔?
2. 找出从自然数1,2,3,....,n中任取r个数的所有组合。例如n=3, r=2的所有组合为:3,2 3,1 2,1
问题点数:100、回复次数:10Top
1 楼cunsh(村少)回复于 2006-03-17 11:02:33 得分 10
int func(int x){
if ( x == 0 ) return 0;
if ( x < 4 ) return 1;
else return func( x - 1 ) + func( x - 4 );
}Top
2 楼angelanpan()回复于 2006-03-17 11:07:36 得分 10
第一题可以用递归,也可以用一个循环。
用a表示1岁的牛,b表示2岁的牛,c表示3岁的牛,d表示大于等于4岁的牛
初值为(1,0,0,0)
the 2nd year: (a=0,b=1,c=0,d=0)
the 3 year (0,0,1,0)
the 4 year (1,0,0,1)
(1,1,0,1)
(1,1,1,1)
(2,1,1,2)
.....
循环下去就行了
最后把a+b+c+d作为结果返回Top
3 楼du51(郁郁思扬)回复于 2006-03-17 11:11:15 得分 50
#include<stdio.h>
#include<stdlib.h>
#define MAXN 100
int a[MAXN];
void comb(int m,int k)
{
int i,j;
for (i=m;i>=k;i--)
{
a[k]=i;
if (k>1) comb(i-1,k-1);
else
{
for (j=a[0];j>0;j--)printf("%4d",a[j]);
printf("\n");
}
}
}
int main()
{
int n,r;
printf("请输入n和r\n");
scanf("%d%d",&n,&r);
a[0]=r;
comb(n,a[0]);
system("PAUSE");
return 0;
}
Top
4 楼du51(郁郁思扬)回复于 2006-03-17 11:14:40 得分 0
#include<stdio.h>
#include<stdlib.h>
int foo(int n)
{
if(n==1||n==2||n==3)return 1;
else return foo(n-1)+foo(n-3);
}
int main()
{
int n;
printf("请输入年份\n");
scanf("%d",&n);
printf("第%d年有%d只\n",n,foo(n));
system("PAUSE");
return 0;
}Top
5 楼iamcaicainiao(老菜,长征)回复于 2006-03-17 11:21:13 得分 5
1. 若一只母兔,从出生第4个年头开始每年生一头母兔,按此规律,第n年时有多少只母兔?
------------------------找公式哦,地归哦Top
6 楼iamcaicainiao(老菜,长征)回复于 2006-03-17 11:22:46 得分 5
2. 找出从自然数1,2,3,....,n中任取r个数的所有组合。例如n=3, r=2的所有组合为:3,2 3,1 2,1-----------------排列组合Top
7 楼liumingqiang02(stavie)回复于 2006-03-17 11:28:29 得分 10
第一个问题用递归算法实现比较简单,程序如下:
int Rabit(int n)
{
int i,rabit=0;
if(n>=4)
{
for(i=4;i<=n;i++)
{
rabit++;
rabit+=Rabit(n-i);
}
return rabit;
}
else
return rabit;
}
main()
{
int n=10,SumRabit=1;
SumRabit+=Rabit(n);
printf("%d\n",SumRabit);
}Top
8 楼jixingzhong(瞌睡虫·星辰)回复于 2006-03-17 11:30:33 得分 5
1 递归(参看 费式数列!!)
2 排列组合啊 ~
不难的说艾 ~Top
9 楼afeiguo(独孤不需求偶)回复于 2006-03-17 21:49:47 得分 0
TO: du51,老兄的递归思想很好,并且运用的很恰当。深为佩服!Top
10 楼ykzhujiang(朱朱)回复于 2006-03-18 04:37:54 得分 5
为啥大家都写第一个阿,
ps:村少那个写错了,呵呵Top




