java百灯判熄问题_百灯熄灭问题--数组的应用

百灯判息问题

有100盏灯,编号为1到100,分别由相应的100个开关控制。开始时全部开关朝上(朝上为开,灯亮),然后进行以下操作:凡是编号是1的倍数的灯反方向拨一次开关:是2的倍数的灯再反方向拨一次开关:是3的倍数的灯又反方向拨一次开关。。。。。。。,直到是100的倍数的灯又反方向拨一次开关。

算法一:

分析:

1、 先定义一个数组a[101],用来存放灯,a[i]=1表示灯亮,a[i]=-1表示灯灭。

2、利用两重循环,实现题目中的拨动开关操作。数组a的100个元素赋初值为1,

表示开始灯全为亮的状态。外循环变量为k,k:1-100,循环100次,表示拨动

开关的100种方法。内循环为i,i的初值为课,终值为100,按k的倍数拨动开关

。拨动一次开关用a[i]=-a[i]表示。

3、a[i]=-1是输出熄灭状态的灯的编号,并统计灯的数量。

上代码:

#include

main()

{

int a[101],i,k,n=0;

for(i=1;i<=100;i++)

a[i]=1;

for(k=1;k<=100;k++)

{

for(i=k;i<=100;i+=k)

a[i]=-a[i];

}

printf("熄灭的灯的编号为:\n");

for(i=1;i<=100;i++)

if(a[i]==-1)

{

printf("%4d",i);

n++;

}

printf("\t 共%d盏\n",n);

}

算法二:按完全平方数输出熄灭的灯的编号。

分析:设灯的编号为n,第n号灯需要反向拨动几次开关,就看n有

几个不同的因子。对任意的n,分解出全部不同的因子,包括1和n本身

,有一个因子就表明n号灯反向拨动一次开关。如果n是完全平方数,则它的

因子个数是奇数,n号灯反向拨动奇数次开关,为熄灭状态

上代码:

#include #include main() {        int a[101],i,k,n=0;        for(i=1;i<=100;i++)           a[i]=1;        for(i=1;i<=100;i++)       {            k=sqrt(i);            if(i==k*k)               printf("%d  ",i);            n++;       }       printf("\t 共%d盏\n",n); }

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值