百度面试题 关于分组游戏的设计
来源:互联网 发布:软件测试校园招聘 编辑:程序博客网 时间:2024/06/06 00:58
百度全体员工玩分组游戏,前面五分钟大家分头找队友,并将每个人找到的队友信息汇报给主持人,如果A和B是队友,B和C是队友,那么A和C也是队友;接着主持人不断地随机抽取两个人,希望判断二者是否为队友。请设计一个计算机程序辅助主持人判断两个人是否为队友,说明程序的关键算法,不需要代码实现。
struct Data{
int left;
int right;
};
class OnelinkNode
{
public:
Data data;
OnelinkNode *next;
OnelinkNode(int left,int right,OnelinkNode *p=NULL)
{
data.left=left;
data.right=right;
next=p;
}
~OnelinkNode()
{}
};
#include <iostream.h>
#include "OnelinkNode.h"
class
Onering{
public:
OnelinkNode *head;
int length;
void OneringUint(int left,int right);
Onering();
~Onering();
bool isEmpty()const//判断链表是否为空
{
return head==NULL;
}
bool remove(OnelinkNode *p);
void output();
void insert_at_head(OnelinkNode *p);
void insert_at_end(OnelinkNode *p);
bool findNode(int k);
int OneringLength();
OnelinkNode* remove_at_head();
OnelinkNode* remove_at_end();
};
Onering::Onering(){
length=0;
}
void Onering::OneringUint(int left,int right)
{
head=NULL;
OnelinkNode *rear;
head=new OnelinkNode(left,right,head);
rear=head;
rear->next=head;
length++;
}
Onering::~Onering()
{
OnelinkNode *p=head,*q;
do
{
q=p;
p=p->next;
delete q;
}
while(p!=head);
head=NULL;
}
OnelinkNode* Onering::remove_at_head(){
OnelinkNode *q,*temp;
q=head;
while(q->next!=head)
q=q->next;
temp=q;
head=head->next;
remove(q);
return temp;
}
OnelinkNode* Onering::remove_at_end()
{
OnelinkNode *q,*temp;
q=head;
while(q->next->next!=head)
q=q->next;
temp=q;
remove(q);
return temp;
}
bool Onering::remove(OnelinkNode *p)
{
if(p!=NULL)
{
OnelinkNode *r;
r=p->next;
if(r!=NULL)
{
if(r==head)
head=p->next;
p->next=r->next;
delete r;
return true;
}
}
return false;
}
void Onering::output()
{
OnelinkNode *p=head;
do{
cout<<p->data.left<<p->data.right<<"-";
p=p->next;
}
while(p!=head);
cout<<endl;
}
void Onering::insert_at_end(OnelinkNode *p)
{
OnelinkNode *q;
q=head->next;
while(q->next!=head)
q=q->next;
p->next=head;
q->next=p;
length++;
}
void Onering::insert_at_head(OnelinkNode *p)
{
insert_at_end(p);
OnelinkNode *temp;
temp=head;
while(head->next!=temp)
head=head->next;
length++;
}
bool Onering::findNode(int k)
{
int temp=length;
OnelinkNode *q=head;
bool flag=false;
while(temp)
{
if(q->data.left==k||q->data.right==k)
{
flag=true;
break;
}
else
q=q->next;
temp--;
}
return flag;
}
#include <iostream.h>
#include <stdio.h>
#include "Onering.h"
#define MAXNUMBER 100
typedef Onering Ring[MAXNUMBER];
//假设百度里面的总人数为N,最坏的情况下,可以分为N/2组;
void main(){
bool exchange=false;
Ring ring;
int left,right;
cin>>left>>right;
ring[0].OneringUint(left,right);
int sum=1,a,b;
int N=10;
//所有的人数组队完毕
while(N--)
{
cin>>a>>b;
exchange=false;
for(int j=0;j<sum;j++)
{
if(ring[j].findNode(a)||ring[j].findNode(b))
{
OnelinkNode *node=new OnelinkNode(a,b);
ring[j].insert_at_end(node);
exchange=true;
//在所有连中均未找到插入点,则新建链
break;
}
}
if(!exchange)
{
sum++;
ring[sum-1].OneringUint(a,b);
}
}
for (int i=0;i<sum;i++)
{
ring[i].output();
}
cout<<"请输入待测的两个人的编号"<<endl;
int cheshi1,cheshi2,num;
cin>>cheshi1>>cheshi2;
for (i=0;i<sum;i++)
{
if(ring[i].findNode(cheshi1))
{
num=i;
break;
}
}
if(ring[num].findNode(cheshi2))
{
cout<<"yes"<<endl;
}
else
cout<<"no"<<endl;
}
- 百度面试题 关于分组游戏的设计
- 百度的面试题
- 百度的一道面试题(关于Cache的)
- 百度的一道面试题(关于Cache的)
- 百度的一道面试题(关于Cache的)
- 关于淘汰85%面试者的百度开发者面试题
- 百度面试题的解答
- 百度的算法面试题
- 一个百度的面试题
- 三道关于面向对象设计的面试题
- 关于淘汰85%面试者的百度开发者面试题的看法
- 百度面试题的java实现
- 传说是百度的面试题
- 据说是百度SA的面试题
- 百度的面试题《卷一》
- 百度一道面试题的PHP解答
- 百度面试题的java实现
- byr上看到的百度面试题
- 用 Windows server 2003 组策略部署 Windows 防火墙
- 编程之美之 饮料供货 之 动态规划算法和备忘录算法实现
- python中read() readline()以及readlines()用法
- Xcode调试 之 内存泄露
- 路径与属性
- 百度面试题 关于分组游戏的设计
- 知乎是否应当拒绝低端用户?
- Linux系统调用--msgsnd/msgrcv函数简介
- 计算三角形面积(叉积)
- JavaScript 入门基础 (八)
- Jquery基础教程之神奇的$()
- MyEclipse8.5搭建ssh2框架
- python出现Non-ASCII character '\xe7' in file ex6.py on line 1, but no encoding declare错误
- S3C2440之UART操作(FIFO中断模式)