c语言中舞伴跳舞问题。。

a.在周末舞会上,男士们(m人)和女士们(n人, n<m)进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一算法模拟上述舞伴配对问题。(1)在第t首曲子时,第x个女生和第几个男生配对跳舞?

b.在什么条件下,上述题目中第x个(1<=x<=m)男生才有可能和他心仪的第y个(1<=x<=n)女生跳舞,在第几首曲子时?

问题b我虽然已经用代码解决,但是对于“什么条件下”舞伴可以搭配成功。。。这个条件是什么 我真心不懂。。。我不是问这个题怎么操作的 我主要问这个条件是什么
下面是我 的代码 应该没问题 有问题也可以指出来 谢谢各位了

****************************************************************************
#include<stdio.h>
#define M 10
#define N 7
int gcd(int x,int y)
{
int z,temp;
if(x<y) {temp=x;x=y;y=temp;}
if((z=x%y)==0) return y;
else gcd(y,z);
}
void main()
{
int m=1,n=1,t,T,x,y;
printf("请输入需要搭配的舞伴男女编号,先输入男生的,再输入女生的\n");
scanf("%d%d",&x,&y);
T=M/gcd(M,N); //求出可以播放曲子的最大次数(不重复的情况下)
for(t=1;t<=T;t++)
{
if((m+y-1)==x) break; //m+y-1将女生编号配对到男生编号
m=m+N;
n=n+N;
while(m>M) m=m-M;
while(n>N) n=n-N;
}
if(t>T) printf("没有找到配对的\n");
else printf("%d男生找到%d女生,在第%d首曲子\n",x,y,t);
}

for(t=1;t<=T;t++)
{
if((m+y-1)==x) break; //m+y-1将女生编号配对到男生编号
m=m+N;
n=n+N;
while(m>M) m=m-M;
while(n>N) n=n-N;
}
if(t>T) printf("没有找到配对的\n");
else printf("%d男生找到%d女生,在第%d首曲子\n",x,y,t);

这种查找方法我不赞同,因为舞曲是循环播放的,一轮舞曲结束后还有下一轮,所以应该再添一层循环,或者来一次递归(递归效率太低了)。搭配不能成功就好像追击问题一样,初始时刻两人的状态为A和B,如果在t时刻两人的状态又变成了A和B,若在0~t内没有追上那么就永远也追不上了。同理,对于配对问题,如果轮到第x男生配对第z个女生,到第t次配对又是x~z,如果在1~t次配对过程中没有成功,那么就不能完成配对。比如N = x * M,(N > 4,M,x为正整数),如果y != 1那么配对是不能成功的。
个人见解,希望对你有帮助。
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-19
不知道....
第2个回答  2012-07-19
不客气

如何用c语言解决舞伴问题
结构数组dancer中存放跳舞的男女,num是跳舞的人数。\/\/男士队列初始化\/\/女士队列初始化\/\/依次将跳舞者依其性别入队\/\/依次输入男女舞伴名\/\/输出女士剩余人数及队头女士的名字\/\/输出男队剩余人数及队头者名字 include<stdio.h>\/\/舞伴配对问题(用循环队列实现)\/\/ define queuesize 100 typedef struct \/...

c语言关于舞会跳舞问题,在周末舞会上,男士们(m人)和女士们(n人, n<...
int x2,y2,t2,a2;printf("问题1\\n请输入男女生的人数,以逗号隔开\\n");scanf("%d,%d",&m,&n);printf("请输入此时跳舞的女生号数\\n");scanf("%d",&y);printf("请输入此时的曲数\\n");scanf("%d",&t);a=gac(m,n,y,t);printf("此时%d号女生的搭档是%d号男生\\n",y,a);pri...

求数据结构C++舞伴配对问题程序代码
="男"&&person.sex!="女") \/\/判断输入性别是否符合要求{cout<<"输入的舞者性别不正确,请重新输入";continue;}else if(person.hour<0||person.hour>23||person.minute<0||person.minute>59||person.second<0||person.second>59){cout<<"输入的舞者到场时间不正确,请重新输入";continue;}el...

用c语言编写舞伴配对程序,急求,快的可以加分
下载文件:舞会.rar|程序写了一个,你看看是不是能满足你要求,满意请采纳!!下面是程序运行的结果:下面是文本文件的内容:

相似回答
大家正在搜