//5-2-1
//腾讯面试题
//*********** 50级台阶,每次可以走一步或两步,问:到达第50级台阶有几种走法?
#include <stdio.h>
#include <stdlib.h>
//方法一:递归方法
double tencent(int n) //这里是一个陷阱,当走到50级的时候,结果将会超出int类型的最大范围,所以要用double类型
{
if (n == 1)
{
return 1.0; //注意这里要用1.0 double类型
}
else if (n == 2)
{
return 2.0;
}
else
{
return tencent(n - 1) + tencent(n - 2);
}
}
//方法二:for循环
double tt(int m)
{
int n1 = 1.0;
int n2 = 2.0;
int n3 = 0.0;
for (int i = 2; i < m; i++)
{
n3 = n1 + n2;
n1 = n2;
n2 = n3;
}
return n3;
}
//方法三: 用数组方法
double ttt(int n)
{
int a[50];
a[0] = 1.0;
a[1] = 2.0;
for (int i = 2; i < n; i++)
{
a[i] = a[i - 1] + a[i - 2];
}
return a[n - 1];
}
void main()
{
printf("%f", tencent(12)); //输出浮点型 别写错了
printf("\n%f", tt(12));
printf("\n%f", ttt(12));
system("pause");
}
//5-2-2
//写一个十进制数字,转换为二进制或者逆序的二进制
#include <stdio.h>
#include <stdlib.h>
void change(int num)
{
if (num == 0)
{
return ;
}
else
{
//以下这两句话颠倒就是逆序输出二进制
change(num / 2); //在递归调用之上就是顺序打印输出,在递归调用之下就是逆序打印输出
printf("%d",num % 2); //若转换为8进制则把这两行代码的2改为8就行
}
}
void main()
{
int num;
scanf_s("%d", &num);
printf("要转换的数字是: %d", num);
printf("\n转换后的数字是: %d");
change(num);
system("pause");
}