c语言报数函数问题 c++报数问题( 二 )


int *cycle=(int *)malloc((num+1)*sizeof(int));//多申请一个空间,在循环过程中方便处理
//依次编号,一号元素为0,暂时闲置
for(i=0;i=num;i++)
{
cycle[i]=i;
}
//置队头和队尾的位置
front=1;
rear=num;
i=1;//报数器置1,开始报数
while(front!=rear)//当队列中元素不止一个时 , 循环
{
//备份出队数据
temp=(rear+1)%(num+1);//在位置rear后预留一个位置,以免有元素入队
cycle[temp]=cycle[front];
front=(front+1)%(num+1);//队头元素出队,队头位置加1
//如果出队的人报数符合条件
if(i==die)
{
i=1;//报数重新置1,开始报数
printf("%d出队\n",cycle[temp]);//显示出队的元素
}
//如果出队的人报数不符合条件
else
{
i++;//报数值增1
//队尾插入刚出队的元素
rear=(rear+1)%(num+1);
cycle[rear]=cycle[temp];
}
}
printf("幸存者是%d\n",cycle[front]);
free(cycle);
}while(num!=0);
return 0;
}
方法二:(按你的要求)
#include stdio.h
/*********************************************************************
*以纯粹的思维方法实现
*时间复杂度T(n)
*过程繁琐,而且也不容易理解
*********************************************************************/
void main(void)
{
int result(int *p,int n,int m);
int i=0,m=0,n=0;
int num[50];
int *p;
for(;;)
{
printf("输入人数和报数值:");
scanf("%d%d", n, m);
for(i = 0; in; i++)
num[i] = i + 1;
p = num;
cout"The last one is NO."result(p,n,m)endl;
}
}
int result(int *p,int n,int m)
{
int i=0;
for(i=0;in;i++)
p[i]=i+1;
i=0;// i为每次循环时计数变量
int k=0;// k为按1,2,3...m报数时的计数变量
int die=0;// die为退出人数
while (dien-1)// 当退出人数比n-1少时(即未退出人数大于1时)执行循环体
{
if (p[i]!=0)k++; //如果编号为0,就不报数;如果编号不为0,报数加1
if (k==m)// 将退出的人的编号置为0
{
printf("%d退出\n",p[i]);
p[i]=0;
k=0;//重新开始报数
m++;//退出人数加1
}
i++;
if (i==n) i=0;// 报数到尾后,i恢复为0
}
while(*p==0) p++;
return *p;
}
【c语言报数函数问题 c++报数问题】关于c语言报数函数问题和c++报数问题的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

推荐阅读