创新工场2017年校园招聘笔试试题
ac=&c;
a.print();
b.print();
c.print();
aa->print();
ab->print();
ac->print();
print(a);
print(b);
print(c);
}
#include
using namespace std;
class A
{
public:
virtual void print()
{ cout << "A::print()" <
};
class B: public A
{
public:
virtual void print()
{ cout << "B::print()" <
};
class C: public A
{
public:
virtual void print()
{ cout << "C::print()" <
};
void print(A a)
{
a.print();
}
void main()
{
A a,*aa,*ab,*ac;
B b;
C c;
aa=&a;
ab=&b;
ac=&c;
a.print();
b.print();
c.print();
aa->print();
ab->print();
ac->print();
print(a);
print(b);
print(c);
}
解答:
A::print();
B::print();
C::print();
A::print();
B::print();
C::print();
A::print();
A::print();
A::print();
三,算法编程题
1,有1分,2分,5分,10分四种硬币,每种硬币数量无限,给定n分钱,求有多少种组合可以组合成n分钱?
解答:
思路:
①,四层循环
②,使用回溯法在空间中搜索
代码为思路2:
[cpp] view plaincopyprint?
// chuangxingongchan.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
using namespace std;
int count=0;
int Target=0;
int coin[4]={1,2,5,10};
int total=0;
vector solution;
void dfs(int index)
{
if( total == Target )
{
count++;
cout << count <<":" ;
for( int i=0; i<(int)solution.size(); i++)
{
cout << solution[i]<<" ";
}
cout << endl;
return;
}
if( total > Target )
return;
for( int i=index; i<4; i++)
{
total += coin[i];
solution.push_back( coin[i] );
dfs(i);
solution.pop_back();
total -=coin[i];
}
}
int _tmain(int argc, _TCHAR* argv[])
{
while(1)
{
count=0;
cin >> Target;
dfs(0);
cout << count <
}
return 0;
}
// chuangxingongchan.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include
#include
using namespace std;
int count=0;
int Target=0;
int coin[4]={1,2,5,10};
int total=0;
vector solution;
void dfs(int index)
{
if( total == Target )
{
count++;
cout << count <<":" ;
for( int i=0; i<(int)solution.size(); i++)
{
cout << solution[i]<<" ";