C语言经典程序n个人n盏灯第一个人关掉所有的灯!第二个人把二的倍数的灯取反!第三个人把三的倍数取反

C语言经典程序n个人n盏灯第一个人关掉所有的灯!第二个人把二的倍数的灯取反!第三个人把三的倍数取反,第1张

你把问题想简单了

提点建议:对程序提问,最好是有一定的注释,并对自己的程序设配尺计思想有所阐述,这样会比较方便别人的理解!

这道题的关键点是,如果第2个人开灯,那么第4、6、8号的灯都开了。等到第4个人开灯的时候,他会把第4、8号灯又都关上了!因此这是关键点!

所以我采取的设计思想是:设关灯为0,开灯为1;设灯的状态为a,那么对灯进行一次 *** 作后变为|a-1|,如果灯一开始是关的(0), *** 作后变为|0-1|=1(灯开了),如果一开始灯饰开的(1), *** 作后变为|1-1|=0(灯关了)!代码如下:

#include<stdio.h>

#include<math.h>

#define Max 100

int main()

{

int n //n个灯,n个人

printf("请输入n的值:")

scanf("%d", &n)

int a[Max] //定义一个数组,放置n个灯的状态,0为关灯,1为开灯;

for (int i = 0i <ni++){ //将所有灯泡对应的状态设为歼卖猜0(即都关灯);

a[i] = 0

}

for (int i = 2i <= ni++){ //从第2个人开始进行 *** 作

for (int j = 1j <= nj++){ //遍历1~n,找出i的倍数。这里注意,由于数组的特性,j=1的话对应的是a[0]

if (j%i == 0)

a[j-1] = abs(a[j-1] - 1) //abs()是取绝对值,如果一开始是氏型0,减1后取绝对值为1;如果一开始为1,减1后为0;

}

}

printf("0为关灯,1为开灯\n")

for (int i = 0i <ni++){

printf("%d ", a[i]) //输出每一盏灯的开关状态,你也可以自己统计开灯关灯的数目!

}

return 0

}

如果有什么不懂追问吧

2个方案:

第一种:

/* 文件名:8bkey.asm?

* 功能:AT89S51单片机的P1接8个发光二极管接了8个开关,编程将开关的状态反映到发光二极管上。

(开关闭合,对应的灯亮,开关断开,对应的灯灭)。

* 入口参数:无

* 出口参数:无

* 硬件说明:

* 1 接8位连接线。将led部份的数据口 JP32接到CPU部份的P0口JP51.

* 2 接8位连接线。将拨码开关的接口 JP40接到CPU部份的P1口JP44.

*/

ORG 00H 定义当前位置为 00H,

START: JB P1.0,NEXT1 位-为1转移到 接口1第0位,NEXT1

CLR P0.0 清0 接口0第0位,

SJMP NEX1 短转移到 NEX1,

NEXT1: SETB P0.0 位-置1 接口0第0位,

NEX1: JB P1.1,NEXT2 位-为1转移到 接口1第1位,NEXT2

CLR P0.1 清0 接口0第1位,

SJMP NEX2 短转移到 NEX2,

NEXT2: SETB P0.1 位-置1 接口0第1位,

NEX2: JB P1.2, NEXT3 位-为1转移到 接口1第2位,NEXT3

CLR P0.2 清0 接口0第2位,

SJMP NEX3 短转移到 NEX3,

NEXT3: SETB P0.2 位-置1 接口0第2位,

NEX3: JB P1.3,NEXT4 位-为1转移到 接口1第3位,NEXT4

CLR P0.3 清0 接口0第3位,

SJMP NEX4 短转移到 NEX4,

NEXT4: SETB P0.3 位-置1 接口0第3位,

NEX4: JB P1.4,NEXT5 位-为1转移到 接口1第4位,NEXT5

CLR P0.4 清0 接口0第4位,

SJMP NEX5 短转移到 NEX5,

NEXT5: SETB P0.4 位-置1 接口0第4位,

NEX5: JB P1.5,NEXT6 位-为1转移到 接口1第5位,NEXT6

CLR P0.5 清0 接口0第1位,

SJMP NEX6 短转移到 NEX6,

NEXT6: SETB P0.5 位-置1 接口悉游搭0第1位,

NEX6: JB P1.6,NEXT7 位-为1转移到 接口1第6位,NEXT7

CLR P0.6 清0 接口1第6位,

SJMP NEX7 短转移到 NEX7,

NEXT7: SETB P0.6 位-置1 接口0第6位,

NEX7: JB P1.7,NEXT8 位-为1转移到 接口1第7位,NEXT8

CLR P0.7 清0 接口0第7位,

SJMP NEX8 短转移到 NEX8,

NEXT8: SETB P0.7 位-置1 接口0第磨拿7位,

NEX8: SJMP START 短转移到 START,

END END

第二种:先说睁拿硬件连接

将8个灯接到P1口的8根线法

灯的排列为

1 2 3 4

5 6 7 8

分别对应

p1_0 p1_1 p1_2 P1_3

p1_7 p1_6 p1_5 P1_4

闪亮程序

unsigned char m

for(n=0n<4n++)

{

m=1<<n//设第一行的灯 4次的值分别为1 2 4 8

m+=m<<4//设第二行的灯

P1=m

wait()//等待

}

依次亮

for(n=1n<5n++)

{

m=1<<n-1//设第一行的灯 4次的值分别为2-1 4-1 8-1 16-1也就是 1 3 7 15

m+=m<<4//设第二行的灯

P1=m

wait()//等待

}

全亮是P1=0XFF

全灭是P1=0X00

自己组合。

要关闭显卡的LED灯,你需要通过显卡驱动程序或者相关软件来进行设置。具体步骤如下:

打开显卡驱动程序或者相关软件,比如NVIDIA GeForce Experience或AMD Radeon软件。

在驱动程序或软件的界面中找到“LED”或者“灯光”设置选项,通常在“设置”或者“控制面板”中。

在“LED”或者“灯光”设置选项中,找到“关闭昌配”或者“关闭灯光”选项,选择它。

如果你的显卡有多个LED区域,你可以选择关闭全部或者部分区域的LED灯光耐芦指。

最后,保存设置并关闭显卡驱动程序或者相关软件即可。

请注意,不同的显卡品牌和型号设置方式可能会有所不同,以上步骤仅供参考,具体以你使用的显卡驱动程序或者软哗物件为准。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12465317.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存