递归程序设计

1.一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?
#include <stdio.h> 
int duck(int v) 
{ 
 if(v==7) 
 return 2; 
 return (duck(v+1)+1)*2; 
} 
void main()
{
	int sum=duck(0);
	int sell=0;
	printf("出发时共赶%d只鸭子\n",sum);
	for(int i=1;i<=7;i++)
	{
	sell=sum-duck(i);
	sum=duck(i);
	printf("经过第%d个村子卖出鸭子: %d\n",i,sell);
	} 
 printf("\n"); 
}


2.角谷定理。输入一个自然数,若为偶数,则把它除以2,若为奇数,则把它乘以3加1。经过如此有限次运算后,总可以得到自然数值1。求经过多少次可得到自然数1。
如:输入22,
输出 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
 STEP=16
#include<stdio.h>
int step=1;
int jiaogu(int a)
{
	if(a==1)
	{
		printf("%d\n",a);
		return 1;
        
	}
	else if(a%2==0)
	{
		step++;
		printf("%d\n",a);
		return jiaogu(a/2);
	}
	else if(a%2!=0)
	{	
		step++;
		printf("%d\n",a);
		return jiaogu(a*3+1);
	}
		
}
void main()
{
	int a=0;
	printf("输入一个自然数:\n");
	scanf("%d",&a);
	jiaogu(a);
    printf("经过%d次可以的到自然数1\n",step);
}
 
3.电话号码对应的字符组合:在电话或者手机上,一个数字如2对应着字母ABC,7对应着PQRS。那么数字串27所对应的字符的可能组合就有3*4=12种(如AP,BR等)。现在输入一个3到11位长的电话号码,请打印出这个电话号码所对应的字符的所有可能组合和组合数。
#include <iostream>
using namespace std;
char str[10][5]= {"", "", "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"}; 
int size[10] = {0, 0, 3, 3, 3, 3, 3, 4, 3, 4};
int tel_length;
int number[11],answer[11];
void RecursiveSearch(int *number,int *answer,int index,int n)
{
	if(index==n)
	{
		for(int i=0;i<n;i++)
			cout<<str[number[i]][answer[i]];
		cout<<endl;
		return;
	}
	else
	{
		for(answer[index]=0;answer[index]<size[number[index]];answer[index]++)
		{
			RecursiveSearch(number,answer,index+1,n);
		}
	}
}
int main(int argc,const char*argv[])
{
	cin>>tel_length;
	for(int i=0;i<tel_length;++i)
		cin>>number[i];
	memset(answer,sizeof(answer),0);
	RecursiveSearch(number,answer,0,tel_length);
	return 0;
}

4.日本著名数学游戏专家中村义作教授提出这样一个问题:父亲将2520个桔子分给六个儿子。分完 后父亲说:“老大将分给你的桔子的1/8给老二;老二拿到后连同原先的桔子分1/7给老三;老三拿到后连同原先的桔子分1/6给老四;老四拿到后连同原先的桔子分1/5给老五;老五拿到后连同原先的桔子分1/4给老六;老六拿到后连同原先的桔子分1/3给老大”。结果大家手中的桔子正好一样多。问六兄弟原来手中各有多少桔子?
#include<stdio.h>
void sum(int orange[],int n)
{
	if(n<6)
		sum(orange,n+1);
	    orange[n]=orange[n]/(8-n)*(9-n)-orange[n-1]/(9-n);
}//表示给出桔子前的桔子数目
void main()
{
	int orange[7]={0,420,420,420,420,420,420};   //六兄弟桔子一样多,各有420个
	orange[1]=orange[1]-orange[6]/2;             //老大的桔子有orange[6]/2来自老二
	sum(orange,1);
	printf("六兄弟原来手中分别有桔子:\n");
	for(int i=1;i<=6;i++)
		printf("%d\n",orange[i]);
	printf("\n");
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(答案见下载资源) 上机任务1 用chrome打开dom.sample2.html页面, 在chrome的控制台中输入jQuery代码并执行,完成以下选择动作: (1)查找id号为tigerLily的元素 (2)查找拥有类myList的元素 (3)查找所有的input元素 (4)查找所有img元素和tr元素 (5)查找id号为coffeePot和id号为someDiv的元素 (6)选择具有id属性的所有元素 (7)选择具有id属性的input元素 (8)选择其value属性等于A的元素 (9)选择其value属性等于A或等于C的元素 (10)选择其title属性值中含有dog的img元素 (11)选择其href属性值以http开头的a元素 (12)选择div元素内嵌套的span元素 上机任务2 用chrome打开dom.sample2.html页面, 在chrome的控制台中输入jQuery代码并执行,完成以下选择动作: (13)选择元素li,该元素作为拥有myList类的ul元素的直接子元素 (14)选择id号为radioA的input元素后面的第一个input兄弟元素 (15)选择id号为radioA的input元素后面的所有input兄弟元素 (16)选择dom sample页面中第3个tr元素 (17)选择其type属性值checkbox且索引为偶数的input元素 (18)选择非最后一行的tr元素 (19)选择所有的checkbox元素 (20)选择所有被选中的表单元素 (21)选择含有1972的td元素 (22)选择包含有sapn元素的div元素 (23)选择表格中每行的第一个单元格和最后一个单元格 (24)选择表格中第3行,标题行不算(要求用nth-child()过滤器) 上机任务3 用chrome打开dom.sample2.html页面,该页面中内嵌有几个CSS类:.red .green .blue .yellow .thickBorder .seeThrough 在chrome的控制台中输入jQuery代码并执行,完成以下选择动作: (1)将拥有alt属性的倒数第二个图片元素应用yellow类 (2)将第一个checkbox表单元素应用.green样式 (3)求id值为checkbox3的元素在所有表单元素里的顺序号 (4)用一条链式语句完成:先对所有img元素应用seeThrough样式,再为所有img元素和tr元素应用yellow样式 (5)用filter方法实现:选择单元格内容为Java或Smalltalk的单元格 (6)取图片集中的第2,3,4张图片 (7)用has方法实现:选择那些包含有ul元素的li元素 (8)将tbody每个单元格里的文字设为:我爱jQuery (9)查找form元素的后代元素中标签为label的元素 (10)查找表单元素中是否有id值为checkbox5的元素 提示: 为某dom元素应用某css样式可以使用jQuery中的addClass方法,例如:将id为tt的div元素应用.bt样式,可用些语句:$("#tt").addClass("color","red");

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值