简述:中国大学MOOC-西安交通大学-计算机程序设计(C++)-第6周编程作业
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 k,int n);
int main()
{
int count,n;
cin>>n;
count = monkeyandPeak(1,n);
cout<<count<<endl;
}
int monkeyandPeak(int k,int n)
{
if (n == 1)
{
return 1;
}
else
{
return 2*(monkeyandPeak(1,n-1)+1);
}
}
2、编写内联函数求矩形的面积和周长(20分)
题目内容:
编写函数求矩形的面积和周长,由于算式非常简单,请使用内联函数方式编写,提高程序运行效率
输入格式:
矩形的长和宽,均为整数
输出格式:
矩形的面积和周长
输入样例:
3 5
输出样例:
15 16
时间限制:500ms内存限制:32000kb
#include<iostream>
using namespace std;
inline int area(int a,int b);
inline int girth(int a,int b);
int main()
{
int a,b;
cin>>a>>b;
cout<<area(a,b)<<endl;
cout<<girth(a,b)<<endl;
}
inline int area(int a,int b)
{
return a*b;
}
inline int girth(int a,int b)
{
return (a+b)*2;
}
3、编写重载函数显示字符串(20分)
题目内容:
编写函数 print_spaced 显示字符串,要求显示出的字符串每个字母之间都有一个空格。要求编写两个同名函数,一个支持字符数组输入,另一个支持string类型输入。然后编写main函数测试这两个函数,第一个使用字符数组输入,第二个使用string类型输入。
输入格式:
两个字符串,长度不超过100,只包含英文大小写字母,不含其他字符。
输出格式:
经间隔空格处理后的两个字符串,两个字符串分居两行。注意字符串的最后一个字母后面没有空格。
输入样例:
news
final
输出样例:
n e w s
f i n a l
#include<iostream>
#include<cstring>
#include <string>
using namespace std;
void print_spaced(char a[]);
void print_spaced(string a);
int main()
{
char a[100];
string b;
cin>>a>>b;
// cout<<a<<endl;
print_spaced(a);
print_spaced(b);
}
void print_spaced(char a[])
{
for (int i=0;i<strlen(a);i++)
{
if (i == strlen(a)-1)
{
cout<<a[i]<<endl;
}
else
{
cout<<a[i]<<" ";
}
}
}
void print_spaced(string b)
{
for (int i=0;i<b.size();i++)
{
if (i == b.size()-1)
{
cout<<b[i]<<endl;
}
else
{
cout<<b[i]<<" ";
}
}
}
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;
case 4:
cin>>n;
for (i = 0;i<n;i++)
{
cin>>data[i];
}
sort(data,n);
print(data,n);
break;
}
}
void sort(int &a, int &b) //引用传参方式,将实际更改a,b值,且这里的比较将直接使用a,b内存地址,影响a,b实际值
{
if (a<b)
{
int temp;
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;
}
else
{
for (int i=n-1;i>0;i--)
{
sort(data[i-1],data[i]);
}
}
}
void print(int data[],int n)
{
for (int i=0;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;
cout<<p<<endl;
if(*p==0) return;
revPrint(p+1);
cout<<*p;
}
int main()
{
char str[110];
cin.getline(str,110); //使用getline接收输入带空格的字符串
revPrint(str);
cout<<endl;
return 0;
}