c语言关于舞会跳舞问题,在周末舞会上,男士们(m人)和女士们(n人, n<m)进入舞厅时,各自排成一队。

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

b.在什么条件下,上述题目中第x个(1<=x<=m)男生才有可能和他心仪的第y个(1<=x<=n)女生跳舞,在第几首曲子时?
****************************************************************************
现在主要是b的问题,我只会判断两个人是否可能成为舞伴,但是对于在什么条件下会成为,我真的不知道...下面是我的代码,没有错。。。。我想问的问题就是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;
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);
}
展开
 我来答
LifeReset
电脑发烧友

推荐于2018-04-13 · 识迷途其未远,觉今是而昨非
LifeReset
采纳数:902 获赞数:1474

向TA提问 私信TA
展开全部
其实你这程序我都没那么弄懂
你更注重技术上的东西
而我学习c语言更注重算法上的东西
也就是说你想通过简单的运算运用技巧性的东东让电脑帮你计算
而我是通过自己思考的算法让电脑表达出来
其实这两种思路都不矛盾的 各有所长
你这程序 人为设定了m,n 有局限性 也就是说可能不通用
我也试着写了些(如果题意没理解错的话)
其实题2用用题1的程序就行了 你再仔细想想 看看我的问题2
#include<stdio.h>
#include<math.h>
int gac(int m,int n,int y,int t)
{int x,z;
if((n*t/m)>0)
{z=(n*t%m+m-n+y);
if(z>m) z=z-m;
x=z;
}
else x=(n*t-n+y);
return x;
}

void main()
{int gac(int m,int n,int y,int t);
int m,n,y,t,a;
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);
printf("问题2\n请输入男主人公及其心仪女生的号数,并以逗号隔开\n");
scanf("%d,%d",&x2,&y2);
t=0;
do
{t++;
a2=gac(m,n,y2,t);}
while(a2!=x2);
printf("如果%d号男生想要与%d号女生跳舞,需要到第%d首曲子\n",x2,y2,t);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式