【C++】习题函数部分

1.编写函数正整数的每个位上的数字逆序输出

#include 
using namespace std;

void reverseDigit(int num)
{
	int n=num,i=0;
	//判断num是几位数
	while(n>0)
	{
		n=n/10;
		i++;
	}
	int a[100];
	for(int j=0;j>N;
	reverseDigit(N);
	//system("pause");
	return 0;
}

2.用递归方式求解这个问题:一只母兔从四岁开始每年生一只小母兔,按此规律,第n年时有多少只母兔?

自己的思考:

#include 
using namespace std;

int rabbitNumber(int n)
{
    int y=0,sum=1;
    if(n>0)
    {
    //兔子在长大
    y++;
    //这一年兔子几岁了?
    if(y>=4)
    {
        //可生一个孩子
        sum++;
    }
    //这一年有几个兔子?
    if(sum>1)
    {
        //有?只老兔子,配合N,前7年只有一只,之后每年多一只老兔子双倍增长。前7年有4只兔子,1只老兔子
        if(n>7)
        {
            sum=sum+2;
        }
        else
            sum++;

    }
   rabbitNumber(n-1);

     return sum;
}
return 0;
}
int main()
{
    cout<

这个结果显然不对,可是我有点思维混乱。百度下别人的写法:

https://blog.csdn.net/hannea/article/details/10949243

这个博客下面有人评论应该是f(n-3),我没想通,感觉作者的应该是对的,n=7的时候,是有5只兔子,兔子从第四年开始double。

2+1+1+1=5只

#include
using  namespace std;
 
int f(int n)
{
	return n < 4 ? 1 : f(n-3) + f(n-1);//注意这个式子的应用。
}
int main()
{
	int n;
	cout << "请输入年数:" << endl;
	while( cin >> n)
	{
		cout << "兔子数为:" << f(n) << "\n";
	}
	return 0;
}

又去看了同类型的题目:https://blog.csdn.net/gml1997/article/details/88806356

理解刚刚那个博客下面的评论了,第四年就开始生兔子,那么n为3时,是1,为4是是2,为5时是3,为6时是4,为7时是6只!因为第四年开始生的小兔子现在是四岁的开始。(有点绕,但真的是!)

通过三个月生兔子理解四年生兔子:

这个第三个月起生兔子的问题,n为2时是1只,n为3时是2只,n为4时是3只,n为5时是5只。到此醒悟。

不过第一个作者的思考推理的过程是值得学习的:

【C++】习题函数部分_第1张图片

就是在n=7的时候不对,N从1开始就不会错了。

 

3.用递归方法写一个将整数转换成字符串的函数itoa

https://blog.csdn.net/qq1594443513/article/details/78396577

现在晚上快10点了,有些晚不自己实现敲代码了。但是需要常记的点是:将整数x(0~9)转换为对应的字符('0'~'9')ascii码要加48,而且写程序是注意string 或者char和int之间的使用。

4.编写程序,定义show()函数的两个重载函数。第一个输出一个int值,前面用字符串“int:”引导;第二个输出一个字符,前面用字符串“A char:”引导。调用show()函数时,分别用int,float,char,和short型变量进行测试,分析一下结果。

这题好像没什么难度,就是题目啰嗦。

【C++】习题函数部分_第2张图片

注意void返回类型就可以了。

5.写一个加密程序,它通过cin从输入流中读入一段明文,通过cout将密文写到输出流,采用下面的简单加密方法:
(1)通过命令行参数读入密钥key,它是一个字符
(2)明文中字符c的密文为c^key[i]
(3)循环使用key的每个字符,直到处理完全部明文。如果key为空,则不作任何加密
(4)解密时,用同一个key重新加密密文,就可以得到明文

#include//引入math头文件

pow(10,x);表示10的x次方。

https://bbs.csdn.net/topics/390290798

有一个问题:C++里面可以次方直接用^符号?我觉得怎么有点奇怪。

===================拖拉的分割线,我回去了,这个明天自己实现看看吧====================

 

 

======================回来了==========================================

【C++】习题函数部分_第3张图片

先附上自己写的:

#include 
#include 
using namespace std;

int main()
{
    char c[100],key[100],m[100];
    cout<<"input c"<>c;
    cout<<"input key"<>key;
    int n_c=strlen(c),n_key=strlen(key);
    if(n_c

程序运行结果:

【C++】习题函数部分_第4张图片

到这里自己认为有可以优化的:

1.可以写个函数在外面,里面加解密其实过程是一样的。

2.老觉得固定分配字符数组c[100]这样是不是不太好,浪费内存,有没有动态分配的方式?

3.貌似指数可以用符号^,记得之前上课还用过pow(x,y),math.h头文件里的函数,好像这个不用。

==============到这里不知道自己写的对不对,上网对比下==================时间的分割线=================---

下面是别人的代码:


#include 
#include 
using namespace std;

int main()
{
	cout<<"keys"<>str;

	int i = 0;
	int keylength = keys.length();

	// 加密
	if (keylength > 0)
	{
		for (int j = 0; j < (int)str.length(); j++)
		{
			str[j] = str[j]^keys[i];
			i++;
			if (i >= keylength)
			{
				i = 0;
			}
		}
	}
 	cout< 0)
	{
		for (int j = 0; j < (int)str.length(); j++)
		{
			str[j] = str[j]^keys[i];
			i++;
			if (i >= keylength)
			{
				i = 0;
			}
		}
	}
 	cout<>str;
   return 0;

用了string头文件,定义类型为string类型,不过对应的计算长度则要用到x.length()函数,这里看到string类型好像就相当于字符数组可以直接x[]当数组用耶。

在自己的codeblocks中的运行结果如图:

【C++】习题函数部分_第5张图片

 

好啦,本章习题到这里了,向下走了,马上就考试了,自己还没怎么看。o(╥﹏╥)o

你可能感兴趣的:(c++)