第六周编程作业

1.递归猴子摘桃(20分)

题目内容:

猴子摘桃:一天,一只猴子摘了若干桃子,当天吃掉一半,觉得不过瘾,又吃了一个;第二天将剩下的桃子吃掉一半又多吃了一个;…,每天将前一天剩下的桃子吃掉一半又多吃一个,直到第n天,发现只剩下一个桃子,问第一天它摘了多少桃子。

编写递归函数,计算第一天猴子摘的桃子的数量。在主函数中输入n,调用函数计算第一天摘的桃子的数量,在主函数中输出。

输入:剩下一只桃子的天数n,n>=1。

输出:第一天摘的桃子数量。

【提示】函数格式:int monkeyandPeak(int k,int n),其中n是1只桃子的天数,k是求哪天的桃子数,返回是第k天的桃子数。主函数的调用格式:

 count= monkeyandPeak(1,n);  //第n天只剩1只桃,求第1天的桃子数

【注意】使用递归实现。

样例1输入:

10

样例1输出:

1534
时间限制:500ms内存限制:32000kb

//递推关系An = 2*(An+1 + 2)
#include <iostream>
using namespace std;
int monkeyAndPeak(int k, int n)//我的递归思路是:从k递推到n
{
	int i = k;
	if(i==n)    return 1;
	return 2*(monkeyAndPeak(i+1,n)+1);
}
int main()
{
	int n;
	cin>>n;
	cout<<monkeyAndPeak(1,n)<<endl;
	return 0;
}

2.编写内联函数求矩形的面积和周长(20分)

题目内容:

编写函数求矩形的面积和周长,由于算式非常简单,请使用内联函数方式编写,提高程序运行效率

输入格式:

矩形的长和宽,均为整数

输出格式:

矩形的面积和周长

输入样例:

3 5

输出样例:

15 16
时间限制:500ms内存限制:32000kb

#include <iostream>
using namespace std;
inline int C(int len, int wid)
{
	return 2*(len+wid);
}
inline int S(int len, int wid)
{
	return len*wid;
}
int main()
{
	int len, wid;
	cin>>len>>wid;
	cout<<S(len,wid)<<" "<<C(len,wid)<<endl;
	return 0;
}

3.编写重载函数显示字符串(20分)

题目内容:

编写函数 print_spaced 显示字符串,要求显示出的字符串每个字母之间都有一个空格。要求编写两个同名函数,一个支持字符数组输入,另一个支持string类型输入。然后编写main函数测试这两个函数,第一个使用字符数组输入,第二个使用string类型输入。

输入格式:

两个字符串,长度不超过100,只包含英文大小写字母,不含其他字符。

输出格式:

经间隔空格处理后的两个字符串,两个字符串分居两行。注意字符串的最后一个字母后面没有空格。

输入样例:

news

final

输出样例:

n e w s

f i n a l

时间限制:500ms内存限制:32000kb

#include <iostream>
using namespace std;
void print_spaced(char str[])
{
	char *p = str;
	cout<<*p;
	p++;
	while(*p)//用指针遍历字符串比较方便
	cout<<" "<<*p++;//先算*p, 再让p++,可分开写
	cout<<endl;
}
void print_spaced(string str)
{
	char *p = &str[0];//string类可做字符数组处理,函数体大致相似
	cout<<*p;
	p++;
	while(*p)
	cout<<" "<<*p++;
	cout<<endl;
}
int main()
{
	char s1[110];
	string s2;
	cin>>s1>>s2;
	print_spaced(s1);
	print_spaced(s2);
	return 0;
}

4.排序函数重载(20分)

题目内容:

编写一组重载的排序函数,可以对两个整数、三个整数、四个整数、整数数组从大到小排序,函数名为sort,其中数组排序应使用递归的方法,另补充print函数,在一行显示排序后的数组元素。

主函数如下:

int main()
{
int a,b,c,d;
int data[100];
int k,n,i;
  cin>>k;
  switch(k)
  {
    case 1:
        cin>>a>>b;
        sort(a,b);
        cout<<a<<" "<<b<<endl;
        break;
    case 2:
        cin>>a>>b>>c;
        sort(a,b,c);
        cout<<a<<" "<<b<<" "<<c<<endl;          
        break;      
    case 3:
	   	cin>>a>>b>>c>>d;
        sort(a,b,c,d);
        cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
        break;  
    case 4:
        cin>>n;
        for(i=0;i<n;i++)
           {
            cin>>data[i];
        } 
        sort(data,n);
        print(data,n);
        break;      
  }
  return 0;
}

输入格式:

请根据主程序自己分析。

输出格式:

排序后的数据,一行,从大到小,末尾没有空格。

输入样例:

4

10

22 15 20 16 3 27 14 64 108 10

输出样例:

108 64 27 22 20 16 15 14 10 3

请提交完整程序,包括给出的main()
时间限制:500ms内存限制:32000kb

#include <iostream>
using namespace std;
void sort(int &a, int &b);
void sort(int &a, int &b, int &c);
void sort(int &a, int &b, int &c, int &d);
void sort(int data[], int n);
void print(int data[], int n);
int main()
{
	int a,b,c,d;
	int data[100];
	int k,n,i;
	cin>>k;
	switch(k)
	{
		case 1:
			cin>>a>>b;
			sort(a,b);
			cout<<a<<" "<<b<<endl;
			break;
		case 2:
			cin>>a>>b>>c;
			sort(a,b,c);
			cout<<a<<" "<<b<<" "<<c<<endl;
			break;
		case 3:
			cin>>a>>b>>c>>d;
			sort(a,b,c,d);
			cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
			break;
		case 4:
			cin>>n;
			for(i=0; i<n; i++)
			{
				cin>>data[i];
			}
			sort(data,n);
			print(data,n);
			break;
	}
	return 0;
}
void sort(int &a, int &b)
{
	if(a<b)
	{
		int temp = a;
			a = b;
			b = temp;
	}
}
void sort(int &a, int &b, int &c)
{
	sort(a,b);
	sort(a,c);
	sort(b,c);
}
void sort(int &a, int &b, int &c, int &d)
{
	sort(a,b,c);
	sort(c,d);
	sort(b,c);
	sort(a,b);
}
void sort(int data[], int n)//递归思路,排好两个后把第三个插入,依次向后推
{							//思路与排三个和四个数时一样
	if(n==1) return;//这是一个测试点
	if(n==2)
	{
		sort(data[0],data[1]);
		return;
	}
	sort(data,n-1);
	for(int i=n-1; i>0; i--)//把后面那个数字插入前面排好序的部分
	{
		sort(data[i-1],data[i]);//顺序要与上面的函数匹配
	}
}
void print(int data[], int n)
{
	cout<<data[0];
	for(int i=1; i<n; i++)
		cout<<" "<<data[i];
	cout<<endl;
}

5.编写递归函数来使字符串逆序(20分)

题目内容:

编写函数来使一个字符串逆序输出,要求必须用递归函数。

输入格式:

一个字符串,不会超过100个字符长,中间可能包含空格

输出格式:

该字符串的逆序

【注意】使用字符数组和递归实现。

输入样例:

Hello,everyone

输出样例:

enoyreve,olleH
时间限制:500ms内存限制:32000kb

#include <iostream>
using namespace std;
void revPrint(char *str)//递归思路,找到字符串末尾,倒着往前走
{
	char *p = str;
	if(*p==0) return;
	revPrint(p+1);
	cout<<*p;
}
int main()
{
	char str[110];
	cin.getline(str,110);//输入带空格的字符串
	revPrint(str);
	cout<<endl;
	return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值