第6周编程联系(ewufeuwy)

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

//递归猴子吃桃
#include<iostream>
using namespace std;
int   monkeyandPeak(int k, int n)//第n天剩下一只桃子,求第k天的桃子树
{
	int i;
	i = k;
	if (i == n)
		return 1;
	else
		return 2 * (monkeyandPeak(i + 1, n) + 1);
}
int main()
{
	int n;
	cin >> n;
	int count = monkeyandPeak(1, n);
	cout << count << endl;
	return 0;
}

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

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

输入格式:

矩形的长和宽,均为整数

输出格式:

矩形的面积和周长

输入样例:

3 5

输出样例:

15 16

#include<iostream>
using namespace std;
inline int L(int a, int b)
{
	return 2 * (a + b);
}
inline int S(int a, int b)
{
	return a * b;
}
int main()
{
	int a, b;
	cin >> a >> b;
	cout << S(a, b) << " " << L(a, b);
	return 0;
}

3编写重载函数显示字符串(20分)
题目内容:

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

输入格式:

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

输出格式:

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

输入样例:

news

final

输出样例:

n e w s

f i n a l

//编写重载函数显示字符串
#include<iostream>
#include<string>
using namespace std;
void print_spaced(char s[])
{
	char* p;
	p = s;
	cout << *p;
	p++;
	while (*p)
	{
		cout << " " << *p;
		p++;
	}
	cout << endl;
}
void print_spaced(string s)
{
	char* p;
	p = &s[0];
	cout << *p;
	p++;
	while (*p)
	{
		cout << " " << *p;
		p++;
	}
	cout << endl;
}
int main()
{
	char s1[200];
	string s2;
	cin.getline(s1, 200);
	cin >> 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()

//排序函数重载
#include<iostream>
using namespace std;
void sort(int &a, int &b)
{
    int temp;
    if (a < b)
    {
        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 a[],int n)
{
    for(int i=0;i<n-1;i++)//其实仅仅是冒泡排序
        for (int j = 0; j < n - 1 - i; j++)
        {
            int temp;
            if (a[j] < a[j + 1])
            {
                temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
            }
        }
}
void print(int a[], int n)
{
    cout << a[0];
    for (int i = 1; i < n; i++)
        cout << " " << a[i];
}
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

//编写递归函数来使字符串逆序
#include<iostream>
using namespace std;
void reverse(char *s)
{
	char* p=s;
	if (*p == 0)
		return;
	reverse(p + 1);
	cout << *p;	
}
int main()
{
	char s[101];
	cin.getline(s, 100);
	reverse(s);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值