递归算法解答Word文档下载推荐.doc

上传人:b****2 文档编号:13323777 上传时间:2022-10-09 格式:DOC 页数:6 大小:25KB
下载 相关 举报
递归算法解答Word文档下载推荐.doc_第1页
第1页 / 共6页
递归算法解答Word文档下载推荐.doc_第2页
第2页 / 共6页
递归算法解答Word文档下载推荐.doc_第3页
第3页 / 共6页
递归算法解答Word文档下载推荐.doc_第4页
第4页 / 共6页
递归算法解答Word文档下载推荐.doc_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

递归算法解答Word文档下载推荐.doc

《递归算法解答Word文档下载推荐.doc》由会员分享,可在线阅读,更多相关《递归算法解答Word文档下载推荐.doc(6页珍藏版)》请在冰豆网上搜索。

递归算法解答Word文档下载推荐.doc

m) //若n天时,有金牌m枚;

则前一天有金牌N*7/6+N-1枚,即n--天时,m=m/6*7+n.

{

if(m%6==0){ //因金牌的数量必须为整数,则m和m/6*7+n也为整数,则m必须为6的整数倍

if(n==1)return1;

//逆推至第一天时,返回1,结束main函数中的i循环

else{n--;

m=m/6*7+n;

F(n,m);

} //当n不是第一天,调用F,依次向前,并将金牌数存放至&

m中,即M中

}

elsereturn0;

//当m不是6的整数倍,返回0,不结束i循环

}

voidmain()

intN,M;

for(inti=1;

i;

i++)

{

M=i;

//因第N天刚好还有金牌N枚,可以将i赋给NM,判断是否可以推至第一天

N=i;

if(F(N,M))break;

//返回1,结束循环

printf("

N=%d M=%d\n"

N,M);

/*//验证

\n分析:

\n"

);

for(i=1;

i<

=N;

printf("

N=%d时,M=%d\n"

i,M);

M=(M-i)/7*6;

2、国王分财产。

某国王临终前给儿子们分财产。

他把

财产分为若干份,然后给第一个儿子一份,再加上剩余财产的1/10;

给第二个儿子两份,再加上剩余财产的1/10;

……;

给第i个儿子i份,

再加上剩余财产的1/10。

每个儿子都窃窃自喜。

以为得到了父王的偏

爱,孰不知国王是“一碗水端平”的。

请用程序回答,老国王共有几

个儿子?

财产共分成了多少份?

intF(int&

n,intm) //假设老国王共有n个儿子,财产共分成了m份,第一个儿子时,剩余财产份数(m-1)*9/10,

{//第n++个儿子时,剩余财产份数m=(m-n)*9/10;

m=(m-n)应为10的整数倍。

n++;

m=m-n;

if(m%10==0){ //为10的整数倍时,进行下一步判断

if(m==0)return1;

//当财产剩余数为零时,返回1,结束main函数中的i循环

else{m=m/10*9;

} //当财产剩余数不为零时,调用F

//当不是10的整数倍时,返回0,继续i循环

intn,m;

i++) //当i==1时,存在一组取值

n=0;

//对于每一个i,需对n清零

m=i;

//以i循环来产生财产份数

if(F(n,m))break;

n=%d m=%d或\n\n"

n,m);

for(i=2;

i++) //当i>

=2时,存在一组取值

n=%d m=%d\n"

=n;

n=%d时,财产剩余m=%d\n"

i,m);

m=(m-i)*9/10;

3、某路公共汽车,总共有八站,从一号站发轩时车上已有n位乘客,到了第二站先下一半乘客,

再上来了六位乘客;

到了第三站也先下一半乘客,再上来了五位乘客,以后每到一站都先下车

上已有的一半乘客,再上来了乘客比前一站少一个……,到了终点站车上还有乘客六人,问发

车时车上的乘客有多少?

intF(intn)

if(n==8)return6;

elsereturn(F(n+1)+n-7)*2;

//对下一站有F(n+1)=F(n)/2+(7-n),则F(n)=……

第1站发车时车上有乘客%d人\n"

F

(1));

//验证 for(inti=2;

i<

=8;

i++)printf("

第%d站,有乘客%d人,在该站上车%d人\n"

i,F(i),8-i);

4、猴子吃桃。

有一群猴子摘来了一批桃子,猴王规定每天只准吃一半加一只(即第二天吃剩下的一半加一只,以此类推),

第九天正好吃完,问猴子们摘来了多少桃子?

1022

if(n==10)return0;

elsereturn(F(n+1)+1)*2;

//对后一天有F(n+1)=F(n)/2-1,则F(n)=……

猴子们摘来桃子%d个\n"

//验证 for(inti=1;

=9;

第%d天有%d个桃子,吃%d个\n"

i,F(i),F(i)/2+1);

5、小华读书。

第一天读了全书的一半加二页,第二天读了剩下的一半加二页,以后天天如此……,

第六天读完了最后的三页,问全书有多少钱页?

220

if(n==6)return3;

elsereturn(F(n+1)+2)*2;

//对后一天有剩余页数F(n+1)=F(n)/2-2,则F(n)=……

全书有多少%d页\n"

第%d天有%d页,读%d页\n"

i,F(i),F(i)/2+2);

6、题目描述:

日本著名数学游戏专家中村义作教授提出这样一个问题:

父亲将2520个桔子分给六个儿子。

分完后父亲说:

“老大将分给你的桔子的1/8给老二;

老二拿到后连同

原先的桔子分1/7给老三;

老三拿到后连同原先的桔子分1/6给老四;

老四拿到后连同原先的桔子分1/5给

老五;

老五拿到后连同原先的桔子分1/4给老六;

老六拿到后连同原先的桔子分1/3给老大”。

结果大家手

中的桔子正好一样多。

问六兄弟原来手中各有多少桔子?

voidF(intA[],intn)

if(n<

6)F(A,n+1);

A[n]=A[n]/(8-n)*(9-n)-A[n-1]/(9-n);

//A[n]/(8-n)*(9-n)表示给出桔子前的桔子数目;

} //A[n]/(8-n)*(9-n)-A[n-1]/(9-n)表示得到桔子前的数目

intA[7]={0,420,420,420,4

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1