| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4086 人关注过本帖
标题:我的“舞伴搭配程序”还需要补充哪些程序??
取消只看楼主 加入收藏
杨杨
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-29
收藏
 问题点数:0 回复次数:12 
我的“舞伴搭配程序”还需要补充哪些程序??

这是一个舞伴搭配问题,具体要求如下:
请设计一系统模拟动态地显示出上述过程,要求如下:

1) 输出每曲配对情况

2) 计算出任何一个男生(编号为X)和任意女生(编号为Y),在第K曲配对跳舞的情况.至少求出K的两个值.


typedef struct{
char name[20];
char sex; //性别,'F'表示女性,'M'表示男性
char count;
}Person p;
typedef Person DataType; //将队列中元素的数据类型改为Person

void DancePartner(Person dancer[],int num)
{//结构数组dancer中存放跳舞的男女,num是跳舞的人数。
int i;
Person p;
CirQueue Mdancers,Fdancers;
InitQueue(&Mdancers);//男士队列初始化
InitQueue(&Fdancers);//女士队列初始化
for(i=0;i<num;i++){//依次将跳舞者依其性别入队
p=dancer[i];
if(p.sex=='F')
EnQueue(&Fdancers.p); //排入女队
else
EnQueue(&Mdancers.p); //排入男队
}
printf("The dancing partners are: \n \n");
while(!QueueEmpty(&Fdancers)&&!QueueEmpty(&Mdancers)){
//依次输入男女舞伴名
p=DeQueue(&Fdancers); //女士出队
printf("%s ",p.name);//打印出队女士名
p=DeQueue(&Mdancers); //男士出队
printf("%s\n",p.name); //打印出队男士名
}
if(!QueueEmpty(&Fdancers)){ //输出女士剩余人数及队头女士的名字
printf("\n There are %d women waitin for the next round.\n",Fdancers.count);
p=QueueFront(&Fdancers); //取队头
printf("%s will be the first to get a partner. \n",p.name);
}else
if(!QueueEmpty(&Mdancers)){//输出男队剩余人数及队头者名字
printf("\n There are%d men waiting for the next round.\n",Mdacers.count);
p=QueueFront(&Mdancers);
printf("%s will be the first to get a partner.\n",p.name);
}
}//DancerPartners


[此贴子已经被作者于2006-5-29 18:08:49编辑过]

搜索更多相关主题的帖子: 舞伴搭配程序 
2006-05-29 18:04
杨杨
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-29
收藏
得分:0 
我已经自己修改过很多次啦!但还是没有成功!望各位能帮我一下!谢谢~~

不是每个人一生出来就什么都懂!所以我不懂就会问!——这就是我来这里的原因!!
2006-05-29 18:06
杨杨
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-29
收藏
得分:0 
有些可能越改越错~~~

不是每个人一生出来就什么都懂!所以我不懂就会问!——这就是我来这里的原因!!
2006-05-29 18:07
杨杨
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-29
收藏
得分:0 

“一班有m个女生,有n个男生(m不等于n),现要开一个舞会. 男女生分别编号坐在舞池的两边的椅子上.每曲开始时,依次从男生和女生中各出一人配对跳舞, 本曲没成功配对者坐着等待下一曲找舞伴.”这就是题目


不是每个人一生出来就什么都懂!所以我不懂就会问!——这就是我来这里的原因!!
2006-05-30 12:19
杨杨
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-29
收藏
得分:0 
而且我还想问一下版主,根据题目说“动态显示出来”应该如何做呢???这个我弄不明白!!!因为我未学过将程序动态显示出来。

不是每个人一生出来就什么都懂!所以我不懂就会问!——这就是我来这里的原因!!
2006-05-30 12:24
杨杨
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-29
收藏
得分:0 


那如果我这样写这个题目的话,有没有符合题意????

#include"iostream.h"
#include"stdio.h"
#include"malloc.h"
#include <stdlib.h>
#define maxsize 50 //maxsize为男女队列的最大人数
struct Person
{ int num;//编号
char name[20];
char sex; //性别,'F'表示女性,'M'表示男性
};
struct CirQueue
{
Person *dancer;
int front,rear;
int count;//当前队列人数

};

void InitQueue(CirQueue *Q)//初始化队列
{ Q->dancer=(Person *)malloc(maxsize*sizeof(Person));
if(!Q->dancer)
{ printf("分配空间失败");
return ;
}
Q->front=Q->rear=0;
Q->count=0; //计数器置0
}


int QueueEmpty(CirQueue *Q)//判断队列无元素是否为空
{
return (Q->rear-Q->front+maxsize)%maxsize;
}

Person QueueFront(CirQueue *Q)//取队头元素
{
if(!QueueEmpty(Q))
printf("Queue if empty.");
return Q->dancer[Q->front];
}

void EnQueue(CirQueue *Q,Person dancer) //入队列
{
if((Q->rear+1)%maxsize==Q->front)
return ;
Q->dancer[Q->rear]=dancer;
Q->rear=(Q->rear+1)%maxsize;
Q->count++;

}

Person DeQueue(CirQueue *Q)//出队列
{
Person temp;
if(!QueueEmpty(Q))
{ printf("Queue underflow");exit(0); }
//队空下溢
temp=Q->dancer[Q->front];
Q->count--; //队列元素个数减1
Q->front=(Q->front+1)%maxsize; //循环意义下的头指针加1
return temp;

}

//将队列中元素的数据类型改为Person
void DancePartner(Person *dancer,int num)//结构数组dancer中存放跳舞的男女,num是跳舞的人数。
{
int i;
Person p;
CirQueue Mdancers,Fdancers;
InitQueue(&Mdancers);//男士队列初始化
InitQueue(&Fdancers);//女士队列初始化
for(i=0;i<num;i++)
{//依次将跳舞者依其性别入队
p=dancer[i];
if(p.sex=='F')
{EnQueue(&Fdancers,p);} //排入女队
else
EnQueue(&Mdancers,p);
//排入男队
}
printf("The dancing partners are: \n \n");

while(QueueEmpty(&Fdancers)&&QueueEmpty(&Mdancers))
{
//依次输出男女舞伴名

p=DeQueue(&Fdancers); //女士出队
printf("%s ",p.name);//打印出队女士名
p=DeQueue(&Mdancers); //男士出队
printf("%s\n",p.name); //打印出队男士名
}
if(QueueEmpty(&Fdancers))
{ //输出女士剩余人数及队头女士的名字
printf("\n There are %d women waitin for the next round.\n",Fdancers.count);
p=QueueFront(&Fdancers); //取队头
cout<<p.name << "will be the first to get a partner.\n";
}
else
if(QueueEmpty(&Mdancers))
{//输出男队剩余人数及队头者名字
printf("\n There are %d men waiting for the next round.\n",Mdancers.count);
p=QueueFront(&Mdancers);

cout<<p.name <<"will be the first to get a partner.\n";

}


}

//DancerPartners

void main()
{ Person dancer[maxsize]={{1,"小红",'F'},{2,"小绿",'F'},{3,"小黑",'M'},{4,"小黄",'M'},{4,"小白",'M'}
,{5,"小紫",'F'},{6,"小李",'M'},{7,"小周",'M'}};

DancePartner(dancer,7);


}






[此贴子已经被作者于2006-5-31 13:05:24编辑过]


不是每个人一生出来就什么都懂!所以我不懂就会问!——这就是我来这里的原因!!
2006-05-31 12:57
杨杨
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-29
收藏
得分:0 
还有,版主问的问题“跳舞的人跳完后是回原来的座位还是做到队尾去”,这个题目没有说明喔!!!但如果上回到原来的座位去,那又会是怎样呢?那不就是后面的男女都没有机会出去跳舞咯?????跳来跳去都是前面几个去跳咯???

不是每个人一生出来就什么都懂!所以我不懂就会问!——这就是我来这里的原因!!
2006-05-31 13:09
杨杨
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-29
收藏
得分:0 
哦!!原来是这样回到原位置!!!我以为回到原位置,然后下一首歌又是从第一个开始!!!看来真的是差不多!!我想我们老师应该也不清楚,因为听说那些题目是他从网上下载给我们的~~~所以就............

不是每个人一生出来就什么都懂!所以我不懂就会问!——这就是我来这里的原因!!
2006-06-01 00:11
杨杨
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-29
收藏
得分:0 
上面那位朋友说还可以用“循环链表”啊?

不是每个人一生出来就什么都懂!所以我不懂就会问!——这就是我来这里的原因!!
2006-06-01 00:12
杨杨
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-5-29
收藏
得分:0 
我发上去的那个程序是刚写好一半的,只是第一问题,第二个问题还没完成~~~

不是每个人一生出来就什么都懂!所以我不懂就会问!——这就是我来这里的原因!!
2006-06-01 00:15
快速回复:我的“舞伴搭配程序”还需要补充哪些程序??
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019832 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved