约瑟夫环

#include <stdio.h>
int main()
{
	//使用数组来且元素是0/1来表示人物状态
	int table[10];
	int i;
	for(i=1; i<=8; i++){
		table[i] = 1;
	}
	for(i=1; i<=8; i++){
		printf("%-4d", table[i]);
	}
	printf("\n");
	//数组中未退出的人数 
	int count = 8;
	//定义,因为递增所以初始化为零 
	int index = 0;
	int baoshu = 0;
	
	while(count>0){
		index++;
		baoshu++;
		//在下面判断出现之前,会有这种情况出现 
		while(table[index]==0){	 
			index++;
			if(index > 8){
				index = 1;
			}
		}
		//第二圈才会出现这个判断	
		if(baoshu == 3){
			table[index] = 0;
			printf("%-4d", index);
			count--;
			baoshu = 0;
		}		
	}
	printf("\n");
	for(i=1; i<=8; i++){
		printf("%-4d", table[i]);
	}
	 
	return 0;
 } 

学习到:

  1. 思路:
  • 先执行一圈几次报数
  • 到达指定状态,执行相应操作
  • 然后循环,直到最后的状态啊
  1. 编程小技巧
    • 用数组下标当做排序
    • 用数组元素的值表示状态
    • 用递增表示报数
  2. 有些题无法下手,因为抓手太多,不知从哪里开始
    • 就按顺序慢慢走一遍,准备好数据结构,变量代表的意义
    • 多次相同操作,就要想到循环
    • 同一个数不断变换,新值换旧值,就要想到迭代
posted @   行至为成  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示