急求用C语言编写算法“舞伴问题”!!!

Windy_juhua 2010-01-05 07:39:08
今有男生m人,女生n人,依性别排成两列。当舞曲响起时,对头的k个男生依序与并排的女生两两结伴起舞(k <=min{m,n}),当舞曲终止时,跳舞者依出场序各归自己原先队列的尾部,等待下一支舞曲。编程模拟这一过程,并求当m,n,k满足什么约束时,队列中任意的两个男女都能够结伴起舞。
任务提示:选择适当的结构数据,根据输入的参数(m,n,k)模拟配对跳舞的过程,不考虑界面的话,直接用数对的形式输出结伴的人员。对于后面的约束条件,可以用两种方法获得。其一是通过编程,取得一些数据后根据其规律进行猜想,然后使用数学方法进行推导求证,其二是直接采用数学方法进行推导。
急求哦!谢谢啦!
...全文
408 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
ancjf__ 2010-01-06
  • 打赏
  • 举报
回复
给我分啊
ancjf__ 2010-01-06
  • 打赏
  • 举报
回复
问题等价于对 i<m, j<n 存在a,b,c为自然数, 使得 i-ck+am = j-ck+bn ,
也就是 i+am=j+bn有解,等价于 am-bn=1和bn-am=1有a,b为自然数的解,
由此得m,n互素,
当m,n互素时存在整数使得am+bn=1
又 am+bn=1时 (a+n)m + (b-n)m=1,我们总是可以增大一个减少一个是一个大于零另一个小于零,所以m,n互素时 am-bn=1和bn-am=1有a,b为自然数的解总成立
问题的解是m,n互素,
zym830828 2010-01-06
  • 打赏
  • 举报
回复
是不是可以用两个循环链表
zhengjiankang 2010-01-06
  • 打赏
  • 举报
回复
原则上只要m和n互素,队列中任意的两个男女都能够结伴起舞。跟k没有任何关系。
hittlle 2010-01-06
  • 打赏
  • 举报
回复
上面表述有问题,应该是

男士至少出场n次,女士至少出场m次时,k,m,n应该满足的条件,两个链表一起进行K个元素移动,至到两个链表中的哨名的ShowTimes分别为n,m时停止移动
hittlle 2010-01-06
  • 打赏
  • 举报
回复
因为是男女两两之间都有共舞的机会,所以这个问题变成,任何一个男士要出场n次,k,m,n应满足的条件;或者,任何一个女士要出场m次,k,m,n应满足的条件。这下子问题就简单了嘛。如果数据结构选用链表,不妨设
GLinkedlist表示男士队列,MLinkedlist表示女士队列,我们可以这样定义


typedef struct node_struct{
unsigned int ShowTimes;
struct node_struct *next;
}GLinkedlist, *pGLinkedlist;

我们用ShowTimes来记录第i个男士(1<=i<=m)的出场次数,ShowTimes的初值为0,我们可以选定队列中的某个元素作为哨兵,比如第一个元素,或者最后一个元素,用循环对其进行k位移动,每一个k位移动中如果有这个元素,ShowTimes就加1,至到ShowTimes等于n为止。想法不完整,见笑了。。。。
liujiaji 2010-01-06
  • 打赏
  • 举报
回复
差不多了,该结贴了
Jnagmy 2010-01-05
  • 打赏
  • 举报
回复
我觉得用队列应该很好实现

但是为什么我会觉得好像有点问题?
vanchristin 2010-01-05
  • 打赏
  • 举报
回复
有点像天干地支的组合
初步的理解:k=1的时候,只要m,n互质就能满足条件,更复杂的情况还没有想出来
vanchristin 2010-01-05
  • 打赏
  • 举报
回复
是汉诺塔,鉴定完毕
周鹏程 2010-01-05
  • 打赏
  • 举报
回复
上面不是"哈LO塔"吗?
z569362161 2010-01-05
  • 打赏
  • 举报
回复
k个?

不明确
z569362161 2010-01-05
  • 打赏
  • 举报
回复
#include<stdio.h>
int m(int n,char a,char b,char c)
{
if(n==1)
printf("%c=>%c\n",a,c);
else
{
m(n-1,a,c,b);
printf("%c=>%c\n",a,c);
m(n-1,b,a,c);
}
}
int main()
{
m(4,'A','B','C');
return 0;
}


就差一点
swl82560397pq 2010-01-05
  • 打赏
  • 举报
回复
.......
liujiaji 2010-01-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liujiaji 的回复:]
一点顶得脑袋瓜子都疼。也没挣多少非技术分。

在顶一次。专接非技术分!
[/Quote]

写错了,
一天顶得脑袋瓜子都疼。也没挣多少非技术分。

在在顶一次。专接非技术分!
Windy_juhua 2010-01-05
  • 打赏
  • 举报
回复
恩恩,呵呵
liujiaji 2010-01-05
  • 打赏
  • 举报
回复
一点顶得脑袋瓜子都疼。也没挣多少非技术分。

在顶一次。专接非技术分!
z569362161 2010-01-05
  • 打赏
  • 举报
回复
数学里的排列啊!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧