『壹』 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; }
}
}
如果對時間要求精確,則要用到定時器,還要確保電路外接有晶振,並已知晶振頻率