| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1537 人关注过本帖
标题:帮忙修改下舞伴搭配问题 急急急!!!!!!!
取消只看楼主 加入收藏
xinjie6872
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-2-26
收藏
 问题点数:0 回复次数:1 
帮忙修改下舞伴搭配问题 急急急!!!!!!!
[问题描述]
一班有m个女生,有n个男生(m不等于n),现要开一个舞会. 男女生分别编号坐在舞池的两边的椅子上.每曲开始时,依次从男生和女生中各出一人配对跳舞, 本曲没成功配对者坐着等待下一曲找舞伴.
  请设计一系统模拟动态地显示出上述过程,要求如下:
   1)    输出每曲配对情况
   2)    计算出任何一个男生(编号为X)和任意女生(编号为Y),在第K曲配对跳舞的情况.至少求出K的两个值.
   3)    尽量设计出多种算法及程序,可视情况适当加分
 提示:用队列来解决比较方便.
搜索更多相关主题的帖子: 舞伴 
2008-02-27 11:01
xinjie6872
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-2-26
收藏
得分:0 
缺少个头文件 大家修改下
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define OK 1
#define OVERFLOW -1
#define ERROR 0
typedef int Status;

int boyscount=0,girlscount=0;    //全局变量
int Lcm(int ,int );            //求最小公倍数(lease common multiple)
//-------循环队列-队列的顺序存储结构----
//#define MAXQSIZE 100
typedef int QElemType;
typedef struct {
     QElemType *base;
     int   front;
     int   rear;
}SqQueue;
//---循环队列的基本算法--------
Status InitQueue(SqQueue &Q,int &MAXQSIZE){
    //构造一个空队列
   Q.base=(QElemType *)malloc((MAXQSIZE+1) *sizeof(QElemType));
   if(!Q.base)exit(OVERFLOW);
   Q.front=Q.rear=0;
   return OK;
}
int Queuelength(SqQueue Q,int MAXQSIZE){
    //返回Q的元素个数,即队列长度
   return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}
Status EnQueue (SqQueue &Q,QElemType e,int MAXQSIZE){
    //入队列,插入元素e为Q的新的队尾元素
    if((Q.rear+1)%(MAXQSIZE+1)==Q.front) return ERROR;    //队列满
        Q.base[Q.rear]=e;
        Q.rear=(Q.rear+1)%(MAXQSIZE+1);
   return OK;
}
Status DeQueue(SqQueue &Q,QElemType &e,int MAXQSIZE){
    //若队列不空,则删除Q的对头元素,用e返回其值,并返回OK
    //否则返回ERROR
   if(Q.front==Q.rear)  return ERROR;
   e=Q.base[Q.front];
   Q.front=(Q.front+1)%(MAXQSIZE);
   return OK;
}

void Init(SqQueue &Boys,SqQueue &Girls){
    printf("\n『初始化』");        //标题
    printf("\n请输入男女生人数,空格分隔:");
    scanf("%d%d",&boyscount,&girlscount);
    InitQueue(Boys,boyscount);
    for(int i=0;i<boyscount;i++){
        EnQueue (Boys,i+1,boyscount);    //给男生编号123...
    }//for
    InitQueue(Girls,girlscount);
    for(i=0;i<girlscount;i++){
        EnQueue (Girls,i+1,girlscount);    //给女生编号
    }//for
    printf("初始化完毕\n");
}//Init

void Match(SqQueue Boys,SqQueue Girls){
    printf("\n『输出每曲配对情况』");
  if(boyscount==0){
        printf("\n   请先初始化!\n");
        return;
    }//if

    int n;
    printf("\n请输入曲目数:");
    scanf("%d",&n);
    int Id_boy,Id_girl;
    printf("\n曲目 男        女\n");
    for(int i=1;i<=n;i++){
        DeQueue(Boys,Id_boy,boyscount);
        DeQueue(Girls,Id_girl,girlscount);
        printf("%3d %3d <---> %3d\n",i,Id_boy,Id_girl);
        //输出每曲配对情况
    }//for
}//Match

void AntiMatch(SqQueue Boys,SqQueue Girls){
    printf("\n『求满足条件的曲目』");
    if(boyscount==0){
        printf("\n   请先初始化!\n");
        return;
    }//if
int x,y;
    printf(  "\n请输入男女编号,空格分隔:");
    scanf("%d%d",&x,&y);
    int Id_boy,Id_girl;
    for(int i=1;i<=Lcm(boyscount,girlscount);i++){
        DeQueue(Boys,Id_boy,boyscount);
        DeQueue(Girls,Id_girl,girlscount);
        if((Id_boy==x)&&(Id_girl==y)) break;
    }//for
    if((Id_boy==x)&&(Id_girl==y)){
        printf("两人会在第%d曲和第%d曲搭配.\n",i,i+Lcm(boyscount,girlscount));
        return;
    }//if
        printf("抱歉,你输入的两人不可能搭配!\n");
}//AntiMatch
int Lcm(int m,int n){//求最小公倍数(lease common multiple)
    int temp,p,r;
    if(n<m){
        temp=n;
        n=m;
        m=temp;    //把大数放在n中,小数放在m中
    }//if
    p=n*m;
    while(m!=0)
    {
        r=n%m;
        n=m;
        m=r;
    }//while
    return p/n;
}//Lcm

#include "Students.h"
void main(){
    SqQueue Boys,Girls;
    system("title 学生搭配问题");    //标题
    system("color 17");
    //设置背景/字体颜色,1为背景,7为前景,其值可随便设,系统默认为07
Begin:
    printf("\n");
    printf(" ╔════════╗\n");
    printf(" ║  学生搭配问题  ║\n");
    printf(" ╚════════╝\n");
    printf("  1.初始化\n");
    printf("  2.输出每曲配对情况\n");
    printf("  3.求满足条件的曲目\n");
    printf("  4.退出\n");

  char choice;
    switch(choice=getch()){
        case '1': Init(Boys,Girls);break;    //初始化
        case '2': Match(Boys,Girls);break;    //输出每曲配对情况
        case '3': AntiMatch(Boys,Girls);break;    //求满足条件的曲目
        case '4': return;        //退出
    }//switch
goto Begin;
}//main
2008-02-27 11:04
快速回复:帮忙修改下舞伴搭配问题 急急急!!!!!!!
数据加载中...
 
   



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

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