提点建议:对程序提问,最好是有一定的注释,并对自己的程序设配尺计思想有所阐述,这样会比较方便别人的理解!
这道题的关键点是,如果第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灯光耐芦指。
最后,保存设置并关闭显卡驱动程序或者相关软件即可。
请注意,不同的显卡品牌和型号设置方式可能会有所不同,以上步骤仅供参考,具体以你使用的显卡驱动程序或者软哗物件为准。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)