随机化数组和约瑟夫环
1、随机化数组问题
就是对已有的数组进行乱序排列,使之随机的,毫无规律;
(1)、代码实现
#include<stdio.h>#include<time.h>#include<stdlib.h>voidshowArray(int*a,intcount);voidrandom_1(int*a,intcount);voidrandom_1(int*a,intcount){inti;inttmp;intindex;srand(time(NULL));for(i=count;i>0;i--){index=rand()%i;tmp=a[index];a[index]=a[i-1];a[i-1]=tmp;}}voidshowArray(int*a,intcount){inti;for(i=0;i<count;i++){printf("%d",a[i]);}printf("\n");}intmain(void){inta[]={4,6,8,2,0,7,1,};intcount=sizeof(a)/sizeof(int);showArray(a,count);random_1(a,count);showArray(a,count);return0;}
(2)、结果截图
2、约瑟夫环问题
M个元素,第N个元素出圈,从第start开始数即可;
(1)、代码实现
#include<stdio.h>#include<malloc.h>voidyusf(char**str,intcount,intdoom,intstart){int*person;inti;intpre=start-2;intcur=start-1;intalive=count;intdoomNumber=0;if(start==1){pre=count-1;}person=(int*)malloc(sizeof(int)*count);for(i=0;i<count;i++){person[i]=(i+1)%count;//循环数组}for(;alive>0;cur=person[cur]){if(++doomNumber>=doom){printf("%s->出圈\n",str[cur]);alive--;doomNumber=0;person[pre]=person[cur];//出圈时的pre的保存}else{pre=cur;}}}intmain(void){char*str[]={"李大","马二","张三","李四","王五","刘六","吊七","朱八","杨九"};intcount=sizeof(str)/sizeof(char*);intdoom;//恶运数字intstart;//从第几个人开始scanf("%d%d",&doom,&start);if(doom>count||doom<=0||start>count||start<=0){return;}yusf(str,count,doom,start);//count个元素,doom个厄运数字,从第start开始;return0;}
(2)、结果截图
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。