您的位置:首页 > 其它

熄灯问题

2015-11-16 14:41 225 查看
Description:

假设围绕着一个圆形舞台有N个彩灯,编号从0到N-1,1<=N<=50,为了配合演出效果需要进行花式熄灯。熄灯的规则是从第x号灯开始熄灭,然后向编号更大的方向数,每逢y个亮着的灯后灭掉当前数到的亮着的彩灯,直到灭完为止。注意N-1号灯与0号灯互为邻居,数到N-1号灯,下一个为0号灯。

输入:彩灯数量N,第一个灭灯的位置x,以及间隔y,使用空格间隔输入

输出:灭灯的顺序,一行内输出,使用空格间隔,最后一个输出的灯泡编号后面仍然有一个空格,全部输出完毕之后换行

样例:

输入:

10 2 3

输出:

2 5 8 1 6 0 7 4 9 3


分析:此题终点解决如何去除已经熄了的灯,然后是解决如何间隔d个灯熄灯。注意熄灯到最后的情况。

最后的几盏灯可以重复计数直到counter==gap为止!

关键在于,分析并理解清楚程序运行的过程,一步一步地求解。

#include<stdio.h>
#define MAX 100
int main() {
int lightNumber = 0;
int gap = 0;
int counter = 0;
int offLight = 0;
int isLight[MAX] = {0};
int currentPos = 0;
scanf("%d %d %d", &lightNumber, ¤tPos, &gap);
offLight = lightNumber;
printf("%d ", currentPos);
offLight--;
isLight[currentPos] = 1;
while (offLight > 0) {
currentPos = (currentPos + 1) % lightNumber;// 递增!
if (isLight[currentPos] == 0)
counter++;               //找到适当的间隔!
if (counter == gap) {
printf("%d ", currentPos);
counter = 0;
isLight[currentPos] = 1;
offLight--;
}
}
printf("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: