=


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

#include<iostream>
using namespace std;

int   monkeyandPeak(int n,int nums) {
	if (n == 1) {
		return nums;
	}
	else {
		nums = (nums + 1) * 2;
		return monkeyandPeak(n - 1, nums);
	}
}

int main() {
	int n;
	cin >> n; 
	cout << monkeyandPeak(n, 1) << endl;
	return 0;
}

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

题目内容:

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

输入格式:

矩形的长和宽,均为整数

输出格式:

矩形的面积和周长

输入样例:

3 5

输出样例:

15 16

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

#include<iostream>
using namespace std;

inline int s(int a, int b) {
	return a * b;
}
inline int l(int a, int b) {
	return 2 * (a + b);
}

int main() {
	int a, b;
	cin >> a >> b;
	cout << s(a, b) << ' ' << l(a, b) << 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>
#include<string>
using namespace std;

void print_spaced(char s[100]) {
	int i = 0;
	while (s[i] != '\0') {
		if (s[i + 1] != '\0')
			cout << s[i] << ' ';
		else
			cout << s[i] << endl;
		i++;
	}
}

void print_spaced(string s) {
	int n = s.length();
	int i ;
	for ( i=0 ; i < n-1; i++) {
		cout << s[i] << ' ';
	}
	cout << s[i] << endl;
}

int main() {
	char a[100];
	string b;
	int n = 0;
	cin >> a;
	cin >> b;

	print_spaced(a);
	print_spaced(b);
	
	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>
#include<string>
using namespace std;

void sort(int &a,int &b) {
    if (a < b) {
        int n = b;
        b = a;
        a = n;
    }
}

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(a, d);
    sort(b, c, d);
}

void sort(int *data, int n) {
     for(int i=0;i<n-1;i++){
      for(int j=0;j<n-1-i;j++){
          sort(data[j], data[j+1]);
      }
     }
}

void print(int data[], int n) {
    int i;
    for (i = 0; i < n - 1; i++) {
        cout << data[i] << ' ';
    }
    cout << data[i] << endl;
}

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;

}

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

题目内容:

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

输入格式:

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

输出格式:

该字符串的逆序

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

输入样例:

Hello,everyone

输出样例:

enoyreve,olleH

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

#include<iostream>
#include<string>
using namespace std;

int main() {
	string s;
	getline(cin, s);
	for (int i = s.length() - 1; i >= 0; i--) {
		cout << s[i];
	}
}