c/c++ 有n个人围成一圈, 顺序排号。从第1个人开始报数(从1~3报数), 凡报到3的人退出圈子, 问最后留下的人原来排在第几号。

本文探讨了一道C/C++编程题目,涉及n个人围成一圈按1~3报数,报到3的人退出。解题关键在于理解算法,包括如何模拟报数过程和剔除人数。通过循环变量控制报数,当人数减少时更新循环条件。代码展示了一种巧妙的解决方案,将报到3的人标记为0并记录剔除人数,直到只剩一人。同时,讨论了问题的归纳总结及通用性,强调了数学思维在编程中的应用。
摘要由CSDN通过智能技术生成

解题思路的重要性显现出来了 比如这个题 n个人肯定是要用数组 毋庸置疑 那么报数怎么实现呢 可以设置一个循环变量 让他从0开始循环 当等于3 的时候 就归零

还有 n个人 肯定需要很多圈报数 这个很多圈怎么实现 也是个问题 这些都是算法的相关问题

突然还有一个很感慨的事情 虽然高数课很久没上了 但是之前高数老师说的一句让我感受颇多 就是数学需要归纳总结 理解 我觉得这个对于很多科目都适用 不仅高数 c也可以 甚至是文科 比如这里需要循环很多圈 以后的另一个问题可能也会面临这个困难 怎么循环很多圈 还有就是报数怎么实现 都需要归纳总结 多思考

代码

int main()
{
	cout << "一共有多少个人:?" << endl;
	int n = 0;
	cin >> n;
	int num[50];
	int* p = num;
	for (int i = 0; i < n; i++)
	{
		*(p + i) = i + 1;    //第几个人的编号就是几  从一开始
	}
	int i = 0;  //用于总循环的变量
	
	int k = 0;  //k是按123报数时的计数变量   一个循环变量  在循环体中让这个数字变化 当变到3的时候就进行某些操作

	int m = 0;  //m是退出的人数  当m等于n-1时 结束  否则不知道什么时候推出
	
	while (m < n - 1)    //当m等于n-1时 就结束
	{
		if (*(p + i) != 0) k++;  //如果这个人不是0 就是有效成员 k就加一 如果是0 那么就k就不变 下面的if语句就不会受到影响
		if (k == 3)
		{
			*(p + i) = 0;   //报到3的人调为0  
			k = 0;          //从0开始重新报
			m++;            //退
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值