用C语言解决--跳舞搭配问题

Python017

用C语言解决--跳舞搭配问题,第1张

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

#include<math.h>

#include<time.h>

#define maxn 1281000

#define max(a,b) (a>b?a:b)

#define min(a,b) (a<b?a:b)

#define abs(a) (a>0? a:-(a))

long n,m

void Init(void)

{

long i,j,o=0scanf("%ld%ld",&n,&m)

for(i=1i<=ni++) for(j=1j<=mj++)

{

o++printf("%ld %ld %ld\n",o,i,j)

}

}

int main(void)

{

freopen("dance.in","r",stdin)

freopen("dance.out","w",stdout)

//while(1)

// {

Init()// Begin()//while(1)

//}

return 0

}

for(t=1t<=Tt++)

{

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那么配对是不能成功的。

个人见解,希望对你有帮助。

其实你这程序我都没那么弄懂

你更注重技术上的东西

而我学习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)

}