回 帖 发 新 帖 刷新版面

主题:关于舞伴问题

谁有一个完整的代码给我参考下啊  

还有 下面这是我找的  运行后有问题 没有进行配对啊  请教

 
#include<iostream.h>
 
#include"stdio.h"
#include <stdlib.h>
#define maxsize 50 //男女队列最大人数
struct Person
{
char name[50];
char sex;  //性别,'W'表示女性,'M'表示男性
};
struct CirQueue
{
Person *dancer;
int front;//队头指示器
int 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,Wdancers;
InitQueue(&Mdancers);//男队初始化
InitQueue(&Wdancers);//女队初始化
for(i=0;i<num;i++)
{//依次将跳舞者按其性别入队
  p=*dancer;       
  if(p.sex=='W')
   EnQueue(&Wdancers,p);  //性别为‘W’排入女队
  else if(p.sex=='M')
   EnQueue(&Mdancers,p); //性别为‘M’排入男队

}
printf("舞伴的搭配情况如下: \n \n");
while(QueueEmpty(&Wdancers)&&QueueEmpty(&Mdancers))
{//依次输出男女舞伴名
  p=DeQueue(&Wdancers);     //女嘉宾出队
  printf("%s            ",p.name);//打印出队女嘉宾的名字
  p=DeQueue(&Mdancers);     //男嘉宾出队
  printf("%s\n",p.name);    //打印出队男嘉宾的名字
}
      printf("***********************************\n");
//输出女嘉宾剩余人数及队头女嘉宾的姓名
if(QueueEmpty(&Wdancers))

  printf("\n共有 %d 个女嘉宾等待下一轮舞曲.\n",Wdancers.count);
  p=QueueFront(&Wdancers);  //取队头
  printf("%s 将会是第一个找到舞伴的人. \n",p.name);
}
else
  //输出男队剩余人数及队头者姓名
  if(QueueEmpty(&Mdancers))
  {
   printf("\n共有 %d 个男嘉宾等待下一轮舞曲.\n",Mdancers.count);
   p=QueueFront(&Mdancers); 
   printf("%s 将会是第一个找到舞伴的人.\n",p.name);
  } 
  printf("***********************************\n");
}


void main()
{int i,j;
Person dancer [maxsize];
char dancer_name[maxsize];
char dancer_sex[maxsize];
printf("请输入参加舞会嘉宾的人数:");
scanf("%d",&i);
          printf("***********************************\n");
while(i<=0)
{
  printf("输入错误,请重新输入:");
  scanf("%d",&i);
}
for(j=1;j<=i;j++)
{   
  printf("请输入第 %d 个嘉宾的名字:",j);
  scanf("%s",&dancer[j-1].name);
  printf("请输入第 %d 个嘉宾的性别(W/M):",j);
  scanf("%s",&dancer[j-1].sex); 
  if (dancer[j-1].sex=='W'||dancer[j-1].sex=='M')
  {}
  else
  {
   while(dancer[j-1].sex!='W'&&dancer[j-1].sex!='M')
   {
    printf("输入错误,请重新再输入一次:");
    scanf("%s",&dancer[j-1].sex);
   }
  }
}
     printf("***********************************\n");
DancePartner(dancer,i);
}

回复列表 (共5个回复)

沙发


帮忙用c语言写个;学生信息管理系统设计。

板凳

[em20]楼主要自己写程序啊···
[code=c]
#include <stdio.h>
#include <stdlib.h>

#define maxsize 50 //男女队列最大人数

struct Person
{
char name[maxsize];
char sex;  //性别,'W'表示女性,'M'表示男性
};

struct CirQueue
{
Person *dancer;
int front;//队头指示器
int 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) == 0)
    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) == 0)
    {
      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,Wdancers;

    InitQueue(&Mdancers);//男队初始化
    InitQueue(&Wdancers);//女队初始化

    for(i=0;i<num;i++)
    {//依次将跳舞者按其性别入队
      p=*dancer;       
      if(p.sex=='W')
      {
          EnQueue(&Wdancers,p);  //性别为‘W’排入女队
      }
      else if(p.sex=='M')
      {
          EnQueue(&Mdancers,p); //性别为‘M’排入男队
      }
      dancer++;
    }
    printf("舞伴的搭配情况如下: \n \n");
    printf("女嘉宾       男嘉宾\n");
    while(QueueEmpty(&Wdancers)&&QueueEmpty(&Mdancers))
    {//依次输出男女舞伴名
      p=DeQueue(&Wdancers);     //女嘉宾出队
      printf("  %s            ",p.name);//打印出队女嘉宾的名字
      p=DeQueue(&Mdancers);     //男嘉宾出队
      printf("%s\n",p.name);    //打印出队男嘉宾的名字
    }
          printf("***********************************\n");
    //输出女嘉宾剩余人数及队头女嘉宾的姓名
    if(QueueEmpty(&Wdancers))
    { 
      printf("\n共有 %d 个女嘉宾等待下一轮舞曲.\n",Wdancers.count);
      p=QueueFront(&Wdancers);  //取队头
      printf("%s 将会是第一个找到舞伴的人. \n",p.name);
    }
    else
      //输出男队剩余人数及队头者姓名
      if(QueueEmpty(&Mdancers))
      {
       printf("\n共有 %d 个男嘉宾等待下一轮舞曲.\n",Mdancers.count);
       p=QueueFront(&Mdancers); 
       printf("%s 将会是第一个找到舞伴的人.\n",p.name);
      } 
      printf("***********************************\n");
}


int main()
{
    int i,j;
    Person dancer [maxsize];
    
    printf("请输入参加舞会嘉宾的人数:");
    scanf("%d",&i);
    printf("***********************************\n");

    while(i<=0)
    {
      printf("输入错误,请重新输入:");
      scanf("%d",&i);
    }
    
    for(j=1;j<=i;j++)
    {   
      printf("请输入第 %d 个嘉宾的名字:",j);
      scanf("%s",&dancer[j-1].name);
      printf("请输入第 %d 个嘉宾的性别(W/M):",j);
      scanf("%s",&dancer[j-1].sex); 
      while(dancer[j-1].sex!='W'&&dancer[j-1].sex!='M')
      {
          printf("输入错误,请重新再输入一次:");
          scanf("%s",&dancer[j-1].sex);
      }
    }
    
    printf("***********************************\n");
    DancePartner(dancer,i);

    return 0;
}
[/code]

建议楼主要写个舞会散场的程序,不然会有内存泄漏

3 楼

非常好  谢谢啊 要是嫩个补充下错在哪里就好了  
还有 代码上有个dancer++ 这个我不明白 可以说下吗

4 楼

LZ调试一下程序就明白了

5 楼

CC++才是王道,C表示压力有点大

我来回复

您尚未登录,请登录后再回复。点此登录或注册