NCLEO


私信TA

用户名:NCLEO

访问量:3118

签 名:

黄袍加身,递王之相

等  级
排  名 2290
经  验 2367
参赛次数 0
文章发表 6
年  龄 0
在职情况 在职
学  校
专  业

  自我简介:

我不生产代码,我只是代码的搬运工

解题思路:

按照题目踢出方法,先把没有踢出的人全部置1,若有人踢出把他置0;

注意事项:

最后一个人i的值必须等于-1,i最后还会+1,再一次循环就从牌p[0]开始;

参考代码:

#include <stdio.h>
#include<malloc.h>
int number(int n,int m);
int main(void)
{
	int n,m;
	while((scanf("%d%d",&n,&m))!=EOF)
	{
		number(n,m);
	}
	return 0;
}
int number (int n,int m)
{
	int *p;//创建指针p
	int i=0,j=0,k=0;
	p=(int *)malloc(sizeof(int )*n);//堆区开辟n个int型空间
	if(p!=NULL)//检测内存是否申请成功
	{			
		for(i=0;i<n;i++)//把所以人的打上编号,没有提出的人都置一	
		{
			p[i]=1;
		}
		for(i=0;i<n;i++)
		{
			if(p[i]!=0)//判断是否被踢出
			{
				j++;
				if(j==m)//j记录数的数字,数到m就置0
				{
					j=0;//每一次都清0
					p[i]=0;//数到m就提出的人;
					k++;//记录提出人的数量
				}
			}
			if(i==n-1)//n-1位就是数组的最后一位
			{
				i=-1;//最后i++
			}
			else if(k==n-1)//n-1是剩下最后一个人
			{
				break;
			}
		}
		for(i=0;i<n;i++)//循环检测出最后一个人的编号
		{
			if(p[i]==1)
			{
				printf("%d\n",i+1);//第一位是0;所以加1
			}
		}
		free(p);//释放内存p
	}
	else
		printf("NO malloc");
	return 0;	
}


 

0.0分

0 人评分

  评论区

  • «
  • »