試題四[題目略]
是個貪心的算法題..
  (1) k=0
 (
2) j<=N
 (
3) k=k+1
 (
4) d[i] + 6
 (
5) O(N)




#include 
<iostream>
using namespace std;

void Fun(int *d,int N){
    
int i=1,j,k=0;
    
int *s=new int[N+1];
    memset(s,
0,sizeof(s));
    
while(i<=N)
    
{
        j
=i+1;
        
while(j<=N&&d[j]-d[i]<=12)   //如果2個房子可以用一個基站覆蓋
            j=j+1;
        
++k;                       //建一個基站
        s[k]=d[i]+6;                 //s[k]為第k個基站到公路A端的距離
        i=j;                        //繼續從沒有覆蓋的開始搜索.
    }

    cout
<<k<<endl;
    delete []s;
}


int main(){
    
int N;
    freopen(
"in.cpp","r",stdin);
    
//6 2 7 12 13 16 20
    
//5 8 15 22 29 36
    while(cin>>N&&N)
    
{
        
int *d=new int[N+1];
        
for(int i=1;i<=N;++i)
            scanf(
"%d",&d[i]);
        d[
0]=0;
        Fun(d,N);
        delete []d;
    }

    
return 0;
}


試題五[題目略]
2叉樹的數據結構考題
typedef struct TreeNode{
    
int id;               //當前節點的識別號
    int ChildNum;         //當前節點的子節點數目
    int d;                //父親點到當前節點的信號衰減值
    struct TreeNode **childptr; //向量,存放當前節點到其所有子節點的指針
    int M;            //當前節點到其所有子節點的信號衰減值中的最大值
    bool boost;       //是否在當前節點放置信號放大器的標志
}
TreeNode;

void placeBoosters(TreeNode *root){
    
//計算root所指節點處的衰減量,如果衰減量超出了容忍值,則放置放大器
    TreeNode *p;
    
int i,degradation;
    
if(root)
    
{
        degradation
=0;root->M=0;
        i
=0;
        
if(i>=root->ChildNum) //沒有孩子返回
            return;
        p
=root->childptr[0];
        
for(;i<root->ChildNum&&p;i++,p=root->childptr[i])
        
{
            p
->M=0;
            placeBoosters(p);
            
if(p->d+p->M>Tolerance)
            
{
                p
->boost=true;
                p
->M=0;
            }

            
if(p->d+p->M>degradation)
                degradation
=p->d+p->M;
        }

        root
->M=degradation;
    }

}


試題六[題目略]
考的是抽象類,純虛函數,繼承和派生的知識。

#include <iostream>
using namespace std;

class FlyBehavior{
    
public:
        
virtual void fly()=0;
}
;

class QuackBehavior{
    
public:
        
virtual void quack()=0;
}
;

class FlyWithWings:public FlyBehavior{
    
public:
        
void fly(){ cout<<"使用翅膀飛行!"<<endl;}
}
;

class FlyNoWay:public FlyBehavior{
    
public:
        
void fly(){ cout<<"不能飛行!"<<endl;}
}
;

class Quack:public QuackBehavior{
    
public:
        
void quack(){ cout<<"發出\'嘎嘎\'聲!"<<endl;}
}
;

class Squeak:public QuackBehavior{
    
public:
        
void quack(){ cout<<"發出空氣與橡皮摩擦聲!"<<endl;}
}
;

class QuackNoWay:public QuackBehavior{
    
public:
        
void quack(){ cout<<"不能發聲!"<<endl;}
}
;

class Duck{
    
protected:
        FlyBehavior 
*flyBehavior;
        QuackBehavior 
*quackBehavior;
    
public:
        
void fly(){ flyBehavior->fly();}
        
void quack() { quackBehavior->quack();}
        
virtual void display()=0;
}
;

class RubberDuck:public Duck{
    
public:
        RubberDuck()
{
            flyBehavior
=new FlyNoWay();
            quackBehavior
=new Squeak();
        }

        
~RubberDuck(){
            
if(!flyBehavior) delete flyBehavior;
            
if(!quackBehavior) delete quackBehavior;
        }

        
void display(){}
}
;
.....~ 如有錯誤,請指出