C语言开灯问题

Python013

C语言开灯问题,第1张

既然只要最后一个,何必全部计算。。。

#include<stdio.h>

int main() {

int m, n

while (scanf("%d%d", &n, &m) != EOF) {

int isOn = 0

do

if (n % m == 0)

isOn = !isOn

while (--m)

printf("%s\n", isOn ? "on" : "off")

}

return 0

}

你的代码的话,应该是输出的时候改成判断a[n]就可以了吧。

楼上那位同学是不知道有种东西叫oj么。。。

#include <stdio.h>

#define n 100

void main(void)

{

int i, j, a[n]

for(i = 0i <ni++) a[i] = 0// 初始化为全0

for(i = 1i <= ni++)

for(j = i j <= nj = j + i)

a[j - 1] += 1

//100人对100灯,都操作完毕,下面是显示

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

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

*/

//我觉得7号灯肯定是在关闭状态

//因为第1个人把所有等打开,那么只有第7个人是7的倍数

//所以第7个人会把第7个灯关闭掉,7号灯的状态肯定是关闭的

//所以说你这个输出有可能是错误的。

//给你写的完整代码,希望能帮到你。

#include<stdio.h>

#define N 1000

struct Light

{

int num

int onOff  //1打开  0关闭

}

int main()

{

int n,k,i

Light light[N]

scanf("%d %d",&k,&n)

if(k>n||n>1000) //不符合条件的直接返回

return 0

for(i=0i<Ni++)  //初始化灯都是亮着的,因为第1个人会把所有灯打开

{

light[i].onOff = 1

light[i].num = i+1

}

for(i=2i<=ki++)  //从第2个人开始循环,一直到第k个

for(int j=0j<nj++)

if(light[j].num%i==0&&light[j].num>=i) //如果灯的编号是人的编号的倍数,且灯号大于人号

{

if(light[j].onOff==1) //如果是开,就关闭,否则打开

light[j].onOff=0

else light[j].onOff=1

//输出信息

printf("i=%d 第%d号灯,状态:%d\n",i,light[j].num,light[j].onOff)

}

for(i=0i<ni++) //遍历,输出所有打开的灯

if(light[i].onOff==1)

printf("%d ",light[i].num)

printf("\n")

return 0

}