‘壹’ c语言的开灯问题,有短代码不理解 求大神解答。
a[j]=!a[j]的意思是a[j]取原来值的逻辑反,比如原来为0,则取反后为1保存,原来如果是1,则运算后保存为0, 可以用a[j]=1-a[j];代替
‘贰’ C语言开灯问题,有n(n<100)盏灯,编号为1~n。第一个人把所有灯都打开,第二个人按下所有
看代码比写代码麻烦,写一个你作参考……
//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
intmain(void){
charlight[101];
intn,k,i,j;
while(1){
printf("Inputn&k(0<n<1000<k<=n)... n=");
if(scanf("%d%d",&n,&k)&&n>0&&n<100&&k>0&&k<=n)
break;
printf("Error,redo:");
}
for(i=1;i<=n;light[i++]=1);
for(i=2;i<=k;i++)
for(j=i;j<=n;j++)
if(j%i==0)
light[j]^=1;
for(i=1;i<=n;i++)
if(light[i])
printf("%d",i);
printf(" ");
return0;
}
‘叁’ C语言开灯问题就解释,题目什么意思
//我觉得7号灯肯定是在关闭状态
//因为第1个人把所有等打开,那么只有第7个人是7的倍数,
//所以第7个人会把第7个灯关闭掉,7号灯的状态肯定是关闭的
//所以说你这个输出有可能是错误的。
//给你写的完整代码,希望能帮到你。
#include<stdio.h>
#defineN1000
structLight
{
intnum;
intonOff;//1打开0关闭
};
intmain()
{
intn,k,i;
Lightlight[N];
scanf("%d%d",&k,&n);
if(k>n||n>1000) //不符合条件的直接返回
return0;
for(i=0;i<N;i++)//初始化灯都是亮着的,因为第1个人会把所有灯打开
{
light[i].onOff=1;
light[i].num=i+1;
}
for(i=2;i<=k;i++)//从第2个人开始循环,一直到第k个
for(intj=0;j<n;j++)
if(light[j].num%i==0&&light[j].num>=i)//如果灯的编号是人的编号的倍数,且灯号大于人号
{
if(light[j].onOff==1)//如果是开,就关闭,否则打开
light[j].onOff=0;
elselight[j].onOff=1;
//输出信息
printf("i=%d第%d号灯,状态:%d ",i,light[j].num,light[j].onOff);
}
for(i=0;i<n;i++)//遍历,输出所有打开的灯
if(light[i].onOff==1)
printf("%d",light[i].num);
printf(" ");
return0;
}
‘肆’ 开灯问题用C语言怎么解决
#include"stdio.h"
voidmain()
{
/*0表示关灯,1表示开灯*/
intn,k,a[101],i,b,c,d;
printf("输入人数");
scanf("%d",&k);
printf("输入灯的数目");
scanf("%d",&n);
for(i=1;i<101;i++)
{
a[i]=0;
}
for(b=1;b<=k;b++)//这里不能是k++啊!死循环了
{
for(c=1;c<=n;c++)
{
if(c%b==0)
{
if(a[c]==0)
{
a[c]=1;
}else
{
a[c]=0;
}
}
}
}
for(d=1;d<=n;d++)
if(a[d]==1){
printf("%d",d);//加上空格,看着清楚些
}
}
‘伍’ 开灯问题用C语言中的数组怎么解决
#include <stdio.h>
#define n 100
void main(void)
{
int i, j, a[n];
for(i = 0; i < n; i++) a[i] = 0;// 初始化为全0
for(i = 1; i <= n; i++)
for(j = i ; j <= n; j = j + i)
a[j - 1] += 1;
//100人对100灯,都操作完毕,下面是显示
for(i = 0; i < n; i++) {
if((i % 8) == 0) printf("\n");
printf(" L%2d: %d, ", i + 1, a[i] % 2);
}
printf("\n");
}
/*
运行结果显示如下:
L 1: 1, L 2: 0, L 3: 0, L 4: 1, L 5: 0, L 6: 0, L 7: 0, L 8: 0,
L 9: 1, L10: 0, L11: 0, L12: 0, L13: 0, L14: 0, L15: 0, L16: 1,
L17: 0, L18: 0, L19: 0, L20: 0, L21: 0, L22: 0, L23: 0, L24: 0,
L25: 1, L26: 0, L27: 0, L28: 0, L29: 0, L30: 0, L31: 0, L32: 0,
L33: 0, L34: 0, L35: 0, L36: 1, L37: 0, L38: 0, L39: 0, L40: 0,
L41: 0, L42: 0, L43: 0, L44: 0, L45: 0, L46: 0, L47: 0, L48: 0,
L49: 1, L50: 0, L51: 0, L52: 0, L53: 0, L54: 0, L55: 0, L56: 0,
L57: 0, L58: 0, L59: 0, L60: 0, L61: 0, L62: 0, L63: 0, L64: 1,
L65: 0, L66: 0, L67: 0, L68: 0, L69: 0, L70: 0, L71: 0, L72: 0,
L73: 0, L74: 0, L75: 0, L76: 0, L77: 0, L78: 0, L79: 0, L80: 0,
L81: 1, L82: 0, L83: 0, L84: 0, L85: 0, L86: 0, L87: 0, L88: 0,
L89: 0, L90: 0, L91: 0, L92: 0, L93: 0, L94: 0, L95: 0, L96: 0,
L97: 0, L98: 0, L99: 0, L100: 1,
Press any key to continue
*/
‘陆’ 求助C语言中的开灯问题!有n盏灯 编号1~n 第一个人把所有灯点亮 ,第2个人按下所有编号为2的倍
这个是白皮书上的题吧。。
把数组a清零之后,每次 j%i==0 a[j] = !a[j];取反的意思就是把0变非零,非零变零。
0和非零,来模拟灯的状态,0表示灯在关着,取非!之后表示灯在开着。
if(first)first = 0;就是为了满足题意的输出要求,书上写的很清楚,如果是想要单纯学算法,不需要在意那些细节,掌握重要思路及代码就行了;如果要比赛,这个就比较重要,需要谨慎。
if(first)就相当于if(first!=0)的意思。
还有什么不懂的吗?
‘柒’ C语言开灯问题
#include"stdio.h"
voidmain()
{
/*0表示关灯,1表示开灯*/
intn,k,a[101],i,b,c,d;
printf("输入人数");
scanf("%d",&k);
printf("输入灯的数目");
scanf("%d",&n);
for(i=1;i<101;i++)
{
a[i]=0;
}
for(b=1;b<=k;b++)//这里不能是k++啊!死循环了
{
for(c=1;c<=n;c++)
{
if(c%b==0)
{
if(a[c]==0)
{
a[c]=1;
}else
{
a[c]=0;
}
}
}
}
for(d=1;d<=n;d++)
if(a[d]==1){
printf("%d",d);//加上空格,看着清楚些
}
}
‘捌’ c语言的开灯问题,求解我这样写哪里有问题假定0为关闭,1为打开。
首先看到n没赋值,就不想在往下看了。
打开网络 搜索 "创建第一个c语言程序" 零基础学软件开发从这里开始吧
‘玖’ 用c语言实现算法led0亮2秒,led1亮3秒,led1灭2秒,led0灭5秒程序
貌似是考多线程,你这里面没说明同步规则,就分开写吧:
void led0thread()
{
while(1)
{
led0.light();
Sleep(2000);
led0.turnoff();
Sleep(5000);
}
}
void led1thread()
{
while(1)
{
led0.light();
Sleep(3000);
led0.turnoff();
Sleep(2000);
}
}
‘拾’ 需要一个C语言程序。51单片机控制:按键按一下,延迟1分钟后开灯,灯亮半个小时就熄灭的程序急需!
如果对时间要求不精确,用软延时即可。
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit s=P1^0;
sbit led=P1^1;
void delayms(uint i) //1ms延时程序
{
uchar j;
for(;i>0;i--)
{
for(j=0;j<125;j++)//如果延时时间误差较大,可按比例改变125这个数
//取值范围0-255,数值越大,延时越长
{;}
}
}
void delay1s(uint i) //1s延时程序
{
for(;i>0;i--){delay1ms(1000);}
}
void main()
{
led=0;
while(1)
{
if (s==0)
{
delayms(20);
if (s==0);{delay1s(60);led=1; }
}
if(led==1){delay1s(1800);led=0; }
}
}
如果对时间要求精确,则要用到定时器,还要确保电路外接有晶振,并已知晶振频率