稳定伴侣问题c语言步骤,c语言练习题一道——稳定伴侣

1 #include

2 #include

3 #include

4

5 /*----结构体----*/

6 typedef structgirl{7 int Mate;//伴侣

8 int Name;//名字

9 int* LikeRank;//喜欢的对象排行榜

10 }Girl;11

12

13

14 typedef structboy{15 int Mate;//伴侣

16 int Name;//名字

17 int* LikeRank;//喜欢的对象排行榜

18 }Boy;19

20

21

22 /*------全局变量-------*/

23 int mateNumber;//情侣对数

24 const int BoySize=sizeof(Boy);25 const int GirlSize=sizeof(Girl);26

27 /*-----各个模块-------*/

28 void initializeGirl(Girl* girl,int name);//初始化姑娘 将对象置为-1,名字为在数组中的次序,喜欢排行榜用shuffleArray打乱顺序

29 void initializeBoy(Boy* boy,int name);//初始化汉子 将对象置为-1,名字为在数组中的次序,喜欢排行榜用shuffleArray打乱顺序

30 void shuffleArray(int array[],int arraySize);//用随机数打乱数组顺序

31 void girlShowLikeRank(int name,int* LikeRank);//姑娘打印喜欢排行版

32 void boyShowLikeRank(int name,int* LikeRank);//汉子打印喜欢排行版

33 bool girlSayYes(int girlName,int boyName,Girl* girls,Boy* boys);//姑娘是否同意,返回结果

34 void boyFindLove(Girl* girls,Boy* boys,int boyName,int* LikeRank);//根据喜欢次序依次表白

35 int findSequenceNumber(int* LikeRank,int boyName);//姑娘寻找此人在心目中的位置

36 int findbachelor(Boy* boys);//寻找单身汉(mate为-1的),找到返回序号,没找到返回-1

37 void printMate(Boy* boys);//根据汉子打印出配对结果

38

39 /*-------主函数-----*/

40 /*

41 首先输入情侣对数,根据个数然后初始化所有的人类42 然后先进行一轮汉子表白43 再无限循环寻找被抛弃的汉子直到所有人配对成功44 最后打印出配对结果45 */

46 intmain(){47 srand((unsigned)time( NULL ));48 printf("请输入有多少对情侣:");49 scanf("%d",&mateNumber);50 Girl* girls=(Girl *)malloc(GirlSize*mateNumber);51 Boy* boys=(Boy *)malloc(BoySize*mateNumber);52 for(int index=0;index

59 int whoBachelor=findbachelor(boys);60 while(whoBachelor!=-1){61 boyFindLove(girls,boys,whoBachelor,boys[whoBachelor].LikeRank);62 whoBachelor=findbachelor(boys);63 };64 printMate(boys);65 system("pause");66 }67 /*-----程序函数----*/

68 void initializeGirl(Girl* girl,intname)69 {70 girl->Name=name;71 girl->Mate=-1;72 girl->LikeRank=(int *)malloc(sizeof(int)*mateNumber);73 for(int i=0;iLikeRank[i]=i;76 }77 shuffleArray(girl->LikeRank,mateNumber);78 girlShowLikeRank(girl->Name,girl->LikeRank);79 }80 void initializeBoy(Boy* boy,intname)81 {82 boy->Name=name;83 boy->Mate=-1;84 boy->LikeRank=(int *)malloc(sizeof(int)*mateNumber);85 for(int i=0;iLikeRank[i]=i;88 }89 shuffleArray(boy->LikeRank,mateNumber);90 boyShowLikeRank(boy->Name,boy->LikeRank);91 }92

93 void girlShowLikeRank(int name,int*LikeRank)94 {95 printf("我是姑娘%d,以下是我的喜欢排行榜:\n",name);96 for(int index=0;index

106 void boyFindLove(Girl* girls,Boy* boys,int boyName,int*LikeRank)107 {108 for(int index=0;index

116 bool girlSayYes(int girlName,int boyName,Girl* girls,Boy*boys)117 {118 if(girls[girlName].Mate==-1){119 printf("我是妹子%d,%d向我求爱,我没有对象于是同意\n",girlName,boyName);120 girls[girlName].Mate=boyName;121 return true;122 }123 else if(findSequenceNumber(girls[girlName].LikeRank,girls[girlName].Mate)>

124 findSequenceNumber(girls[girlName].LikeRank,boyName))125 {126 printf("我是妹子%d,%d向我求爱,我抛弃原配%d\n",girlName,boyName,girls[girlName].Mate);127 boys[girls[girlName].Mate].Mate=-1; //抛弃原配

128 girls[girlName].Mate=boyName;129 return true;130 }131 else{132 printf("我是妹子%d,%d向我求爱,我更喜欢原配%d\n",girlName,boyName,girls[girlName].Mate);133 return false;}134 }135 /*

136 寻找仍然单身的汉子137 找到返回名字,没找到返回-1;138 */

139 int findbachelor(Boy*boys)140 {141 for(int index=0;index

148 void printMate(Boy*boys)149 {150 for(int index=0;index

154 /*---工具函数--*/

155 int findSequenceNumber(int* LikeRank,intboyName)156 {157 for(int index=0;index

161 void shuffleArray(int array[],intarraySize)162 {163 int i,j,T=100,tmp;164 while(T--)165 {166 i=rand()%arraySize;167 j=rand()%arraySize;168 tmp=array[i];169 array[i]=array[j];170 array[j]=tmp;171 }172 }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值