一百个灯泡排成一排,第一轮将所有灯泡打开;第二轮每隔一个灯泡关掉一个。 即排在偶数的灯泡被关掉,第三轮每隔两个灯泡,将开着的灯泡关掉,关掉的灯泡打开。 依次类推,第n轮结束的时候,还有几盏灯泡亮着。
2017-05-12 22:46
816 查看
今天笔试遇到一个题目,搜了下貌似是百度的面试题,回来原样写下来一遍编译就通过了,结果也没问题,现场却被打了个大叉,当时直接笑笑叫他有空再仔细看看,然后走了...(我也是够拽的吧
)
新人报道,共同学习,多多指导......
/*
一百个灯泡排成一排,第一轮将所有灯泡打开;第二轮每隔一个灯泡关掉一个。
即排在偶数的灯泡被关掉,第三轮每隔两个灯泡,将开着的灯泡关掉,关掉的灯泡打开。
依次类推,第n轮结束的时候,还有几盏灯泡亮着。
*/
#include "stdafx.h"
int getLight_on(int *light)
{
int pos = 0, count = 0;
for (int i = 0; i < 100; i++)//第一轮所有的等全部打开
{
light[i] = 1; //get all light on
}
for (int j = 1; j < 100; j++) //从第二轮到第100轮..即.当前正在进行第(j+1)轮
{
pos = 0; //每一轮/我要操作的位置复位
pos += j;// 1 2 3...... //第一个pos值1,2,3,4,5......
while (pos < 100)
{
if (0 == light[pos])
{
light[pos] = 1;
}
else
{
light[pos] = 0;
}
pos += (1 + j); //比如第2轮:j = 1,我要操作的pos为1,3,5,7......j即操作的是第2,4,6,8...个灯;
}
}
for (int k = 0; k < 100; k++)
{
if (1 == light[k])
{
printf("tota light on num is:%d\n",k+1);
count++;
}
}
return count;
}
int main()
{
int light[100] = {0};
printf("%d",getLight_on(light));
getchar();
return 0;
}
)
新人报道,共同学习,多多指导......
/*
一百个灯泡排成一排,第一轮将所有灯泡打开;第二轮每隔一个灯泡关掉一个。
即排在偶数的灯泡被关掉,第三轮每隔两个灯泡,将开着的灯泡关掉,关掉的灯泡打开。
依次类推,第n轮结束的时候,还有几盏灯泡亮着。
*/
#include "stdafx.h"
int getLight_on(int *light)
{
int pos = 0, count = 0;
for (int i = 0; i < 100; i++)//第一轮所有的等全部打开
{
light[i] = 1; //get all light on
}
for (int j = 1; j < 100; j++) //从第二轮到第100轮..即.当前正在进行第(j+1)轮
{
pos = 0; //每一轮/我要操作的位置复位
pos += j;// 1 2 3...... //第一个pos值1,2,3,4,5......
while (pos < 100)
{
if (0 == light[pos])
{
light[pos] = 1;
}
else
{
light[pos] = 0;
}
pos += (1 + j); //比如第2轮:j = 1,我要操作的pos为1,3,5,7......j即操作的是第2,4,6,8...个灯;
}
}
for (int k = 0; k < 100; k++)
{
if (1 == light[k])
{
printf("tota light on num is:%d\n",k+1);
count++;
}
}
return count;
}
int main()
{
int light[100] = {0};
printf("%d",getLight_on(light));
getchar();
return 0;
}
相关文章推荐
- 面试题: 一百个灯泡排成一排,第一轮将所有灯泡打开;第二轮每隔一个灯泡关掉一个...
- 一百个灯泡排成一排,第一轮将所有灯泡打开;第二轮每隔一个灯泡关掉一个
- 一百个灯泡排成一排,第一轮将所有灯泡打开;
- Office 2010 excel在打开两个表格的时候,只能在一个窗口显示,怎么分开来看?
- 每次看到某个数据结构的时候,有两个指针,一个起始,一个结束,一直没想明白为何是起始与结束,不是起始加数量,是怎么操作的?
- 一个偶数等于两个奇数之和,求组成偶数E的两个奇数的所有组合
- 二、 编写函数int stat(int a[],int n,int c[][2])。a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位
- 1.写一个函数返回参数二进制中1的个数2.获取一个数二进制序列中所有的偶数为和奇数位,分别输出二进序列3.输出一个整数的每一位4.编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(b
- 编写函数int stat(int a[],int n,int c[][2])。a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位的
- 1.写一个函数返回参数二进制中 1 的个数;2..获取一个数二进制序列中所有的偶数位和奇数位;3. 输出一个整数的每一位;4.两个int整数的二进制表达中,有多少个位不同
- 1、写一个函数返回参数二进制中 1 的个数(三种方法)2、获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列3、输出一个整数的每一位。4、两个int(32位)整数m和n的二进制表达中,有多
- 巧排数字,将1,2,...,19,20这20个数字排成一排,使得相邻的两个数字之和为一个素数,且首尾两数字之和也为一个素数。编程打印出所有的排法。
- 我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。 现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数
- 编写函数int stat(int a[],int n,int c[][2])。a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位
- 编写函数int stat(int a[],int n,int c[][2])。a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位的
- 一百个灯泡排成一排
- 只要相信就一定能,无论何时何地都要坚信心中最初的梦想,永不妥协:第二次世界大战刚刚结束的时候,德国战场一片废墟,有两个美国人去访问一家住在地下室里的德国居民。离开那里的时候,其中一个美国人已激动得不能自己。甲问:“你怎么啦?”乙说:“你信不信,他们一定能很快重建家园!”
- 1.flex工程报错出现每次打开窗口的时候都会弹出一个窗口提示错误,提示“a problem has occurred when opening project "your project name",try to restart the applicat
- [BUC-2.21]给出一个正整数,输出它所有可能的连续自然数(两个以上)之和的算式
- 给我的blog加了一个功能,每次打开的时候自动在顶部副标题位置显示一条格言:)