解题思路:给一个数组在里面随便赋非零的值,遍历每个元素,如果这个元素不是零,就报数+1存起来;报的数如果是3的倍数,那就把这个元素标记一下,给他赋为零,以便下次报数的不再为这个元素报数。用循环直到只剩一个非零的元素,就完了
注意事项:多次循环,直到剩一个非零的元素
参考代码:
void main()
{
int arr1[1000]={0};
int n=0;////////////输入的数
int i=0;///////////循环
int j=0;/////////////标记的非零的元素,就相当于报数
int m=0;/////////////标记是零的元素,跳过报数
int x=0;/////////////先存输入的n值
scanf("%d",&n);
x=n;
while(n--)////////////其实只要是赋非零的数的就好
{
arr1[i]=i+1;
i++;
}
for(i=0;i<x;i++)
{
if(arr1[i]!=0)///////////开始报数
{
j++;
}
if(j%3==0&&arr1[i]!=0)////////////报数报到3的时候标记这个元素,给他赋零,并且不能重复赋零
{
arr1[i]=0;
m++;
}
if(i==x-1&&m<x-1)/////////////////第一轮报完的时候,非零的元素不是1个,或者是零的元素不是n-1个,就是没赋完
{
i=-1;///////////后面要i++,才是0,下次循环
}
}
for(i=0;i<x;i++)
{
if(arr1[i]!=0)
{
printf("%d ",arr1[i]);//////////////////打印这个非零的元素,就是报数完没报到3的
}
}
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复