原题链接:[编程入门]报数问题
解题思路:定义一个足够大的数组来存放人员的编号,定义一个变量来延续数组后面的编号!比如:n=3,则数组为{1,2,3};数组足够大的情况下,判断下标+1%3是否等于0;是就把这个下标的元素置0。表达能力不太好。具体的看代码把。标注的挺清楚的。
注意事项:循环的退出条件用一个计数器来作为跳出条件,看代码把。
参考代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | # 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 ; } |
9.9 分
11 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复