本文主要是介绍2036开关门,1109开关门,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一:2036开关门
1.1题目
1.2思路
1.每次都是房间号是服务员的倍数的时候做处理,所以外层(i)枚举服务员1~n,内层(j)枚举房间号1~n,当j % i=0时,做处理
2.这个处理指的是,开门的时候变成关门,关门的时候开门,所以可以用取反运算符=!
1.3代码
#include <stdio.h>
//2036开关门
int main()
{int arr[1005] = { 0 };int n = 0;scanf("%d", &n);int i = 0;for (i = 2; i <= n; i++){int j = 0;for (j = 1; j <= n; j++){if(j % i==0)arr[j] = !arr[j];}}for (i = 1; i <= n; i++){if (arr[i] == 0){printf("%d ", i);}}return 0;
}
二:1109开关灯
2.1题目
2.2思路
这个题的本质和上面提的本质是一样的,只是服务员的数量和灯的数量不一定一样,但是代码是差不多的
2.3代码
#include <stdio.h>
//1109开关灯
int main()
{int arr[50008] = { 0 };int n = 0, m = 0;scanf("%d %d", &n, &m);int i = 0;for (i = 2; i <= m; i++){int j = 0;for (j = 1; j <= n; j++){if (j % i == 0){arr[j] = !arr[j];//取反逻辑}}}int cont = 0;for (i = 1; i <= n; i++){if (arr[i] == 0){if (cont == 0){printf("%d", i);cont++;}elseprintf(",%d", i);}}return 0;
}
这篇关于2036开关门,1109开关门的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!