33,311
社区成员
发帖
与我相关
我的任务
分享
使标记为0.#include <stdio.h>
#include <stdlib.h>
#define OUT_FLAG 7
/*初始化数组*/
int *init_arr(int *a, int len)
{
int i = 0;
for(; i < len; i++)
printf("%d ", a[i] = i+1);
printf("\n");
return a;
}
/*约瑟夫环1*/
void print_out_order(int *a, int len)
{
/*
* num:队列中非0数字的个数
* mark:出列的标记数
* ret:最终剩下的数
* row:换行打印标记
*/
int num = 0, row = 1, mark = 0, ret;
int j;
while(num != 1){
num = 0;
for(j = 0; j < len; j++){
if(a[j] != 0){
num++;
mark++;
ret = a[j];
}
if(mark == OUT_FLAG){
printf("%2d%c", a[j], !(row % 10) ? '\n' : ' ');
a[j] = 0;
mark = 0;
row++;
}
}
}
printf("\n\n--------\"%d\" is the last one!\n", ret);
}
/*约瑟夫环2*/
void print_out_order2(int *a, int len)
{
int i, count = 0, rem = len;
for(i = 0; rem > 1; i++){
if(i > (len-1))
i = 0;
if(a[i]){
count++;
if(OUT_FLAG == count){
count = 0;
printf("%d ", a[i]);
a[i] = 0;
rem--;
}
}
}
putchar('\n');
}
int main(void)
{
int len;
printf("How many people in the queue?\n");
scanf("%d", &len);
int *arr = (int *)malloc(sizeof(int) *len);
if (!arr) {
fprintf(stderr, "malloc error!\n");
return -1;
}
init_arr(arr, len);
printf("\nThe order of people quit queue is:\n");
print_out_order(arr, len);
printf("---------proc 2-------------\n");
int arr2[len];
init_arr(arr2, len);
print_out_order2(arr2, len);
free(arr);
return 0;
}
约瑟夫环参考一下吧