随机化数组和约瑟夫环
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了随机化数组和约瑟夫环相关的知识,希望对你有一定的参考价值。
1、随机化数组问题
就是对已有的数组进行乱序排列,使之随机的,毫无规律;
(1)、代码实现
#include<stdio.h> #include<time.h> #include<stdlib.h> void showArray(int *a, int count); void random_1(int *a, int count); void random_1(int *a, int count){ int i; int tmp; int index; srand(time(NULL)); for(i = count; i > 0; i--){ index = rand()%i; tmp = a[index]; a[index] = a[i-1]; a[i-1] = tmp; } } void showArray(int *a, int count){ int i; for(i = 0; i < count; i++){ printf("%d ", a[i]); } printf("\n"); } int main(void){ int a[] = {4, 6, 8, 2, 0, 7, 1,}; int count = sizeof(a)/sizeof(int); showArray(a, count); random_1(a, count); showArray(a, count); return 0; }
(2)、结果截图
2、约瑟夫环问题
M个元素,第N个元素出圈,从第start开始数即可;
(1)、代码实现
#include<stdio.h> #include<malloc.h> void yusf(char **str, int count, int doom, int start){ int *person; int i; int pre = start-2; int cur = start-1; int alive = count; int doomNumber = 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; } } } int main(void){ char *str[] = {"李大", "马二", "张三", "李四", "王五", "刘六", "吊七", "朱八", "杨九"}; int count = sizeof(str)/sizeof(char *); int doom; //恶运数字 int start; //从第几个人开始 scanf("%d%d", &doom, &start); if(doom > count || doom <= 0 || start > count|| start <= 0){ return; } yusf(str, count, doom, start); //count个元素,doom个厄运数字,从第start开始; return 0; }
(2)、结果截图
本文出自 “wait0804” 博客,请务必保留此出处http://wait0804.blog.51cto.com/11586096/1909852
以上是关于随机化数组和约瑟夫环的主要内容,如果未能解决你的问题,请参考以下文章