浅枫


私信TA

用户名:a1105054657

访问量:30867

签 名:

生命不止,奋斗不息

等  级
排  名 123
经  验 7745
参赛次数 3
文章发表 26
年  龄 21
在职情况 学生
学  校 抚顺职业技术学院
专  业 电气自动化技术专业

  自我简介:

潺潺弱弱的小菜鸡一只!

解题思路:定义一个足够大的数组来存放人员的编号,定义一个变量来延续数组后面的编号!比如: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;
}


 

0.0分

13 人评分

  评论区

这个代码还是有bug的,你输入1,得到的答案不对
2022-05-01 15:03:25
牛啊牛啊,连空间都不释放的,膜!
2022-01-20 16:07:11
不然这样也可以了就
2021-05-30 22:34:43
这道题是想让用链表来写的吧
2021-05-30 22:34:10
  • «
  • 1
  • »