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

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

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
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
以下是引用杨杨在2006-5-29 18:04:00的发言:

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



楼主能不能把那个上述过程也贴出来呢?不然很不好改你的程序


我的征途是星辰大海
2006-05-29 23:28
杨杨
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
asdffdsa
Rank: 1
等 级:新手上路
帖 子:25
专家分:0
注 册:2006-5-25
收藏
得分:0 
恩 班主讲一下把
2006-05-30 17:49
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 

这里还有个问题,就是跳舞的人跳完后是回原来的座位还是做到队尾去。
我搞了个动态显示的,跳舞的人跳完后做到队尾,开始那个用圈圈筐筐表示的不怎么好,刚才重新改了下感觉不错了。


#include<stdio.h>
#include <time.h>
#include <stdlib.h>

typedef struct QNode{
int num;
struct QNode *next;
}QNode,* QueuePtr;

typedef struct{
QueuePtr front;
QueuePtr rear;
}LinkQueue;


void sleep( clock_t wait ) //延迟函数
{
clock_t goal;
goal = wait + clock();
while( goal > clock() ) ;
}

void InitQ(LinkQueue &Q) //建立空队列
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
Q.front=p;
Q.rear=p;
Q.front->next=NULL;
}


void EnQueue(LinkQueue &Q,int num)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
p->num=num;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}


void DeQueue(LinkQueue &Q, int &num)
{
QueuePtr p,q;
if(Q.front==Q.rear)
printf("队列为空");
p=Q.front->next;
num=p->num;
Q.front->next=p->next;
q=p->next;
if(Q.rear==q)
Q.rear=Q.front;
free(p);
}


void printF(LinkQueue &F,int i) //打印第i首曲子时女队的情况
{
QueuePtr p;
int n=1;
while(n<i)
{
printf("_ ");
n++;
}
p=F.front->next;
while(F.rear!=p){
printf("%d ",p->num);
p=p->next;}
printf("%d \n",p->num);
}
void printM(LinkQueue &M,int i) //打印第i首曲子时男队的情况
{
QueuePtr p;
int n=1;
while(n<i)
{
printf("_ ");
n++;

}
p=M.front->next;
while(M.rear!=p){
printf("%d ",p->num);
p=p->next;}
printf("%d \n",p->num);
}

void main()
{
int m,n,k,i,num;
QueuePtr p,q;
LinkQueue F; //女生队
LinkQueue M; //男生队

printf("请输入女生数量:");
scanf("%d",&m);
printf("请输入男生数量:");
scanf("%d",&n);
printf("请输曲子号:");
scanf("%d",&k);

InitQ(F);
InitQ(M);
for(i=1;i<=m;i++)
{
EnQueue(F,i);
}
for(i=1;i<=n;i++)
{
EnQueue(M,i);
}

for(i=1;i<=k;i++)
{
system("CLS");
printf("第%d首曲子 \n",i);
printF(F,i);
printM(M,i);
p=F.front->next;
q=M.front->next;
printf("目前跳舞的是第%d号女生和第%d号男生\n",p->num,q->num);
sleep(3000);
DeQueue(F,num);
EnQueue(F,num);
DeQueue(M,num);
EnQueue(M,num);
}
}

[此贴子已经被作者于2006-5-30 23:38:31编辑过]


我的征途是星辰大海
2006-05-30 22:57
starrysky
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:华中科技大学EI -T0405
等 级:版主
威 望:11
帖 子:602
专家分:1
注 册:2005-9-12
收藏
得分:0 
这个程序是用VC++编译的,不过有个BUG,就是,男生和女生人数少于2个(包括2个)的时候会出错,正在想办法改进

我的征途是星辰大海
2006-05-30 23:45
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
starrysky 程序基本是没什么问题!下面是一点修改的部分

另外: 操作完成之后加入销毁队列的操作
[CODE]
void InitQ(LinkQueue &Q) //建立空队列
{
QueuePtr p;

p=(QueuePtr)malloc(sizeof(QNode));
if(p==NULL) /*必要的*/
exit(-1);
Q.front=p;
Q.rear=p;
Q.front->next=NULL;
}

void EnQueue(LinkQueue &Q,int num)
{
QueuePtr p;

p=(QueuePtr)malloc(sizeof(QNode));
if(p==NULL) /*必要的*/
exit(-1);

p->num=num;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}

void DeQueue(LinkQueue &Q, int &num)
{
QueuePtr p,q;

if(Q.front==Q.rear)
{
printf("队列为空");
return ;
}
p=Q.front->next;
num=p->num;
Q.front->next=p->next; /*这里有点小问题*/
if(!p->next)
Q.rear=Q.front;
free(p);
}

[/CODE]

叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-05-31 02:22
快速回复:我的“舞伴搭配程序”还需要补充哪些程序??
数据加载中...
 
   



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

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