栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

c++ 实现点灯程序

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

c++ 实现点灯程序

算法数据结构习题1

训练1-38: 现在有n 盏灯,编号为1~n ,开始时所有的灯都是关
的,编号为1的人走过来,把编号是1的倍数的灯开关按下(开的关上,
关的打开),编号为2的人把编号是2的倍数的灯开关按下,编号为3的
人又把编号是3的倍数的灯开关按下……直到第k 个人为止。
给定n 和k (0

题目分析:
灯的序号是1到n;人的序号是1到k,
解题思路:第一个人到第一个灯前去判断灯的序号是自己序号的倍数如果是就反转灯的状态然后去下一个灯去判断,,,直到最后一个灯为止。
第二个人开始同样的操作走到第一个灯的前面去比较灯的序号是不是自己序号的倍数是把灯的状态反转,然后下一个灯,,,,知道最后一个灯为止
第三个人同样,,,,直到最后一个人也完成所有的灯的判断。
最后输出灯的状态。

灯的状态因为只有亮和灭两种状态所以 灯类型是 bool 真假对应亮和灭
每个人都要去关闭灯所以第一个循环就是人从1开始到k;
每个人都要去到100个灯的面前所以又一个内层循环1到n;
然后思考人的序号和灯的序号之间的关系 i代表的是人的序号j代表的是灯的序号
#include 
using namespace std;
const int n = 1000;		//灯的个数1000
const int k = 10;		//人的个数
void main(){
	
	bool lamp[n+1] = { false };	//把所有的灯全部关掉
	for (int i = 1; i <= k; i++){//人的号
	//	n%i	//要关灯的好
		for (int j=1; j <= n; j++){
			if (j%i == 0){	//灯号除以人的序号等于0按下灯的开关 
				lamp[j] = !lamp[j];
			}			
		}
	}	
	int flag=0;//记录灯灭的数量
	for (int i = 0; i <= n; i++){
		if (lamp[i]){
			cout << " ";
			flag++;
		}
		else
			cout << "-";	
	}
	cout << endl;
	cout << flag << endl;//灯亮的个数
	system("pause");
}

总结: 就是把问题转抽象成计算机程序,想出对应的步骤,最后用程序表达

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/291252.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号