缘由请问如何解决这一问题?_编程语言-CSDN问答
请问如何解决这一问题?
n名同学排成一列,每人头顶一盏LED灯,编号从1到n。一开始这n名同学随机开关自己的LED灯,形成明暗相间的图案。用1表示开,0表示关。
你被选为发令员,向同学们发出“切换开关”的指令,以使所有的灯关闭或者点亮。在整个过程中,仅允许你的指令改变一种状态。然后周而复始。例如,对于以上图案,你可以喊: 请1到2号同学切换开关,请6到8号同学切换开关,请10号同学切换开关,请13到14号同学切换开关,请18号同学切换开关。通过5次指令点亮了所有的灯。你也可以采用4次指令关闭所有的灯,但最佳方案无疑应该是后者。如果有多个相同次数的指令序列,输出任意一个即可。
任意给定一个初始图案,请你给出一个最佳指令方案,使得所有灯关闭或点亮。输入格式如下,第1个数字代表灯的个数n,随后的n个字符代表n盏灯的明灭情况。例如18 001110001011001110,则输出为 请3到5号同学切换开关 请9号同学切换开关 请11到12号同学切换开关 请15到17号同学切换开关
程序要求:定义并调用lightshow函数来解决问题。该函数的代码行数在12行以下,每行一条指令。
void 点亮或熄灭灯最优指令数()
{
int l = 0, y = 0, n = 0;
string zfc = "";//18 001110001011001110
char c = 0;
cin >> n >> zfc;
c = zfc[–n];
qj:if (n–)
{
if (c == '0'&&zfc[n] != c)
++l;
if (c == '1'&&zfc[n] != c)
++y;
c = zfc[n];
goto qj;
}
if (c == '0')++l; else ++y;
cout << (y < l ? y : l) << "\\n";//如果相等任意指令皆可
}

常听人言:不为你,也不为我,为天下众生。似乎高不可攀,高处不胜寒的样子,其实是逆思维、逆言。另一种比较通顺有情的说法是:为你我亲眷、爱友,也为爱友之亲眷、爱友,芸芸众生,这是比较顺情的说法;私不废公,公不废私,不违有为世界有情,顺情的说法,平易近人,善于沟通。



