STEP1
确定表示方法。用数组的方法,如果index对应的值为0,则表示没有站出来,每次站出来的index对应的值变为1。
初始化数组
STEP2
轮着出来。
1.本想分两步,第一步有k的作用,第二步只有m,但是感觉其实k就是index就是一个初始位置。woc成功了,因为每次其实都是从一个特定位置开始所以不用单独考虑第一次。
2.用int count = 0;while(count<n)确保循环的次数
3.if(a[j]==0){}else{j++; if(j==n){j = 0;}}确保报1的这个数是之前没有被输出过的
4.确保每次报m次的这个循环里的数都没有被输出过
5.j其实才是下标
6.
计数,每十个有回车,最后一个有回车,其他中间是空格。(一开始没看到十个一行)
#include <stdio.h>
#include <stdlib.h>
//怎样输出index 怎么删除 怎么轮
int main()
{ int n,k,m;
scanf("%d,%d,%d",&n,&k,&m);
if(k>n)
{
printf("k should not bigger than n.\n");
exit(1);
}
if((n<1)||(m<1)||(k<1)){
printf("n,m,k must bigger than 0.\n");
exit(1);
}
int a[n];
for(int i = 0;i<n;i++)
{
a[i] = 0;
}
//
int index = k-1;
int j = index;
int count = 0;
int cnt1=0;
while(count<n)
{
if(a[j]==0){
//index = j+m;//这个过程很有可能造成略过已经出列的数字
//到底怎么样才能在剩下的里面循环
for(int k = 1;k<m;k++){
j++;
if(j==n){j = 0;}
while(a[j]==1){
j++;
if(j==n){j = 0;}
}
}
index = j+1;
//if(index==(n+1)){index = 1;}
printf("%d",index);
cnt1++;
if((cnt1%10==0)||(cnt1==n)){printf("\n");
}
else{printf(" ");}
count++;
a[index-1] = 1;
}
else{j++;
if(j==n){j = 0;}}
}
return 0;
}