解题思路:
按照题目踢出方法,先把没有踢出的人全部置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 人评分