xxx2016年校园招聘编程题 : n级台阶、String类、数据交换并排序
1、n级台阶
n级台阶,可以跳1级,也可以跳2级,总共有多少总跳法?
算法思想:算法为fun(n)
(1)当只有1级时,跳1级,只有1种方法;
(2)当只有2级时,可以只跳1级,也可以一次跳2级,总共有2种方法
(3)当为n>2级时,第1级跳1级,剩下的n-1级台阶跳法有fun(n-1);第一级跳2级时,剩下的n-2级跳法有fun(n-2)种。
即fun(n)=fun(n-1)+fun(n-2).为Fibonacci数列.
</pre><pre name="code" class="cpp">int FunSteps(int n)
{
if(n==1||n==2)
return n;
else
return FunSteps(n-1)+FunSteps(n-2);
}
2、String类函数
#include<iostream>
#include<string>
using namespace std;
class String
{
private:
char *m_data;
public:
String(const char *str=NULL);
String(const String &another);
String & operator=(const String &rhs);
~String();
void print();
};
//返回值类型 类名::函数名(参数)
String::String(const char *str)
{
if(str)
{
m_data=new char[strlen(str)+1];
strcpy(m_data,str);
}
else
{
m_data=new char[1];
*m_data='\0';
}
}
//新变量的拷贝构造函数
String::String(const String &another)
{
if(another.m_data)
{
m_data=new char[strlen(another.m_data)+1];
strcpy(m_data,another.m_data);
}
else
{
m_data=new char[1];
*m_data='\0';
}
}
//已有变量的=重载
String & String::operator=(const String &rhs)
{
if(this==&rhs)
return *this;
if(m_data)
delete [] m_data;
if(rhs.m_data)
{
m_data=new char[strlen(rhs.m_data)+1];
strcpy(m_data,rhs.m_data);
}
else
{
m_data=new char[1];
*m_data='\0';
}
return *this;
}
//析构函数
String::~String()
{
if(m_data)
delete [] m_data;
}
//输出
void String::print()
{
cout<<m_data;
}
int main(void)
{
String c("ok");
c.print();
String c1=c; //拷贝构造函数
c1.print();
String c2;
c2=c; //=重载函数
c2.print();
return 0;
}
3、数据交换并排序
n个乱序的数,其中只能有0与其他任何位置的数SWAP(交换),编程实现升序排序
考试时候没有时间了,读题没有读懂,后面经同学指点,应该是比较交换只能是下标为0的位置和其他任何位置交换,
即应该是冒泡法的排序思想:
#include<iostream>
using namespace std;
void bubble(int *a,int n)
{
int t;
for(int i=0;i<n;i++)
{
for(int j=0;j<n-1-i;j++)
{
if(a[j]>a[0])
{
t=a[j];
a[j]=a[0];
a[0]=t;
}
}
t=a[0];
a[0]=a[n-1-i];
a[n-1-i]=t;
}
}
int main(void)
{
int a[10]={2,10,11,9,1,4,9,8,5,6};
bubble(a,10);
for(int i=0;i<10;i++)
cout<<a[i]<<" " ;
cout<<endl;
return 0;
}