有一个数组a[1000]存放0-1000,要求每隔二个数删除一个数,到末尾时循环到开头继续进行,求最后一个被删掉数的原始下标。
这是题目。我做了一个通用解法,做的不好,希望大家指出错误。下面是代码。
这是题目。我做了一个通用解法,做的不好,希望大家指出错误。下面是代码。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>//用来查看使用了多少时间。
/*循环版*/
void main1()
{
int a[100];
int num,death;//num表示输入的总人数,death表示输入的出局编号
printf("亲输入总人数,小于100人\n");
scanf("%d",&num);
printf("请输入淘汰序号\n");
scanf("%d", &death);
int count = 0;//进行计算运行了多少次
int i=0, j=0;
for (int temp = 0; temp <= num; temp++)
a[temp] = 1;
while (1)
{
if (a[i%num] == 1)
{
j++;
}
if (j == death)
{
a[i%num] = 0;
j = 0;
count++;
if (count == (num))break;//当运行到最后一个时退出循环
printf("现在%d被淘汰\n", i%num + 1);