张冰锐


私信TA

用户名:dotcpp0686936

访问量:122

签 名:

等  级
排  名 3781
经  验 1842
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 南京信息工程大学
专  业

  自我简介:

解题思路:建立bool型数组,通过一般的穷举思路不断判断当下情况,至只剩下最后一个数,取下标

注意事项:函数中i作为计数器被反复使用,可以以i=0为界讨论各步骤

参考代码:

#include<stdio.h>

int main()

{

int n;

void count(int);

scanf("%d",&n);

count(n);

return 0;

}

void count(int n)

{

bool s[n];

int i,j=1,kill=0; //定义已去除的数个数kill 

for(i=0;i<n;i++) //数组初始化 

{

s[i]=0;

}

i=0;

while(n-kill!=1) //剩下最后一个数时停止 

{

if(!s[i])

{

if(j==3) //判断是否数到三 

{

s[i]=1; //去除下一个未去除的数 

kill+=1; //已去除的数个数加一 

j=1; //j更新为一 

}

else

{

j+=1; //若s[i]存在且j不为3,j+1 

}

}

i=(i+1)%n; //通过取模防止数组越界 

}

i=0;

while(s[i]==1) //找出最后剩下数的下标 

{

i++;

}

printf("%d",i+1); //由于提前一个数停止,故i+1 

}


 

0.0分

1 人评分

  评论区

  • «
  • »