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只。到此醒悟。
不过第一个作者的思考推理的过程是值得学习的:
就是在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型变量进行测试,分析一下结果。
这题好像没什么难度,就是题目啰嗦。
注意void返回类型就可以了。
5.写一个加密程序,它通过cin从输入流中读入一段明文,通过cout将密文写到输出流,采用下面的简单加密方法:
(1)通过命令行参数读入密钥key,它是一个字符
(2)明文中字符c的密文为c^key[i]
(3)循环使用key的每个字符,直到处理完全部明文。如果key为空,则不作任何加密
(4)解密时,用同一个key重新加密密文,就可以得到明文
#include
pow(10,x);表示10的x次方。
https://bbs.csdn.net/topics/390290798
有一个问题:C++里面可以次方直接用^符号?我觉得怎么有点奇怪。
===================拖拉的分割线,我回去了,这个明天自己实现看看吧====================
======================回来了==========================================
先附上自己写的:
#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
程序运行结果:
到这里自己认为有可以优化的:
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中的运行结果如图:
好啦,本章习题到这里了,向下走了,马上就考试了,自己还没怎么看。o(╥﹏╥)o