一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
/*
File name:duck.cpp
Author:杨柳
Date:2017/5/23
IDE:DEV-c++
*/
/*
递归函数:
f(n)={ 0 n=7
f(n+1)*2+2 n<7 (因为:f(n)-(f(n)/2+1)=f(n+1))
}
其中n为经过的村子数,f(n)为经过n村子所剩下的鸭子数
*/
#include<iostream>
using namespace std;
//经过第几个村子所剩余的鸭子数,故总的鸭子数为第0个村子所剩余的鸭子数
int leftduck(int n){ // n为经过的村子数
if(n==7)
return 2-(2/2+1);//第七个村庄剩余0只
else
return (leftduck(n+1)*2)+2;
}
//计算经过每个村子卖出的鸭子数
int sellduck(void) {
int i=7;
for(i;i>0;i--){
cout<<"第"<<i<<"村庄卖出鸭子数为:"<<(leftduck(i-1)/2+1)<<endl;//卖出数为前一个村庄剩余数除2加1
// cout<<"第"<<i<<"村庄剩余鸭子数为:"<<leftduck(i)<<endl;
}
return 0;
}
int main(){
cout<<"出发时共赶鸭子为:"<<leftduck(0)<<endl;
sellduck();
}
#include<iostream>
using namespace std;
//经过第几个村子所剩余的鸭子数,故总的鸭子数为第0个村子所剩余的鸭子数
int leftduck(int n){ // n为经过的村子数
if(n==7)
return 2-(2/2+1);//第七个村庄剩余0只
else
return (leftduck(n+1)*2)+2;
}
//计算经过每个村子卖出的鸭子数
int sellduck(void) {
int i=7;
for(i;i>0;i--){
cout<<"第"<<i<<"村庄卖出鸭子数为:"<<(leftduck(i-1)/2+1)<<endl;//卖出数为前一个村庄剩余数除2加1
// cout<<"第"<<i<<"村庄剩余鸭子数为:"<<leftduck(i)<<endl;
}
return 0;
}
int main(){
cout<<"出发时共赶鸭子为:"<<leftduck(0)<<endl;
sellduck();
}
<span style="color:#ff9900"><img data-cke-saved-src="https://img-blog.csdn.net/20170517191708283?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2xpdV93/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" src="https://img-blog.csdn.net/20170517191708283?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveWFuZ2xpdV93/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></span>