解题思路:定义一个足够大的数组来存放人员的编号,定义一个变量来延续数组后面的编号!比如:n=3,则数组为{1,2,3};数组足够大的情况下,判断下标+1%3是否等于0;是就把这个下标的元素置0。表达能力不太好。具体的看代码把。标注的挺清楚的。

注意事项:循环的退出条件用一个计数器来作为跳出条件,看代码把。

参考代码:

#include<stdio.h>
#include<stdlib.h>
int main() {
	int i,k=0,l,n;			//i作为循环条件,k作为计数器,l作为n结尾的开头
	int *p;
	scanf("%d",&n);
	p=(int*)malloc(sizeof(int)*n*8);//定义一个可变化的指针大小 
	for(i=0; i<n*(n/2); i++) {	//给每一个元素的相应位置赋值对应的人员编号
		p[i]=i+1;
	}
	l=n;				//让l的初始值等于数组的最后那个数的下一个
	for(i=0; k<n-1; i++) {		//退出条件是n-1个元素置0后退出 
		if((i+1)%3==0) {	//取余,余数为0的就是数到3的那个人 
			p[i]=0;		//数字是3的人给他这个数组元素清0 
			k++;		//计数器k+1 
		} else if(p[i]!=0) {	//判断这个数组元素是否为0 
			p[l]=p[i];	//数组不为0的元素将他放到数组n的后面作为延续 
			l++;
		}
	}
	printf("%d",p[l-1]);		//直接输出第l-1个元素就是剩下的最后的那个人的编号了 
	return 0;
}


点赞(2)
 

0.0分

11 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 8 条评论

隐世 10月前 回复TA
@hatr 一个人你报个锤子的数
C猿 2年前 回复TA
@藏风扁舟子 @dotcpp0597572 p是用户自行向系统申请的空间,用完啥时候释放由用户说了算,用free(p);释放
起岸希 2年前 回复TA
@藏风扁舟子 不释放空间不是不好吗?没懂
hatr 2年前 回复TA
这个代码还是有bug的,你输入1,得到的答案不对
藏风扁舟子 2年前 回复TA
牛啊牛啊,连空间都不释放的,膜!
绝对炽热 3年前 回复TA
不然这样也可以了就
绝对炽热 3年前 回复TA
@绝对炽热 #include<stdio.h> int main() { 	int n, i, s = 0; 	scanf("%d", &n); 	for (i = 2; i <= n; i++) 		s = (s + 3) % i; 	printf("%d", s + 1); 	return 0; }
绝对炽热 3年前 回复TA
这道题是想让用链表来写的吧