蒜头君今天回到了老家的大宅院,老家的灯还是那中拉线的灯(拉一次为亮,再拉一次就灭),蒜头君觉得无聊。把 1000盏灯 3的倍数拉了一次,5的倍数拉了一次,7的倍数拉了一次(灯得的编号从 1−1000
,灯的初始状态都是亮的)。这个时候蒜头君在想还剩下几盏灯还在亮着?
提示:请不要输出多余的符号。
我最开始的思路的解法:
#include<bits/stdc++.h>
using namespace std;
int a[1005];
int s=1000;
int main()
{
for(int i=1;i<=1000;i++)
{
a[i]=i;
}
for(int i=1;i<=1000;i++)//是3的倍数灭,
{
if(a[i]%3==0)
s--;
}
for(int i=1;i<=1000;i++)//是5的倍数但不是3的倍数,灭,
{
if(a[i]%5==0&&a[i]%3!=0)
s--;
}
for(int i=1;i<=1000;i++)//是5的倍数也是3的倍数,亮,
{
if(a[i]%5==0&&a[i]%3==0)
s++;
}
for(int i=1;i<=1000;i++)//是7的倍数但不是3和5的倍数,灭,
{
if(a[i]%7==0&&a[i]%3!=0&&a[i]%5!=0)
s--;
}
for(int i=1;i<=1000;i++)//是7的倍数也是3的倍数但不是5的倍数,亮,
{
if(a[i]%7==0&&a[i]%3==0&&a[i]%5!=0)
s++;
}
for(int i=1;i<=1000;i++)//是7的倍数也是5的倍数但不是3的倍数,亮,
{
if(a[i]%7==0&&a[i]%5==0&&a[i]%3!=0)
s++;
}
for(int i=1;i<=1000;i++)//是7的倍数也是5的倍数也是3的倍数,灭,
{
if(a[i]%7==0&&a[i]%5==0&&a[i]%3==0)
s--;
}
cout<<s<<endl;
return 0;
}
简便解法:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int num=0;
bool a[1005];
for(int i=1;i<=1000;i++)
a[i]=true;//初始状态 全部灯都亮着 true代表灯亮 false代表灯灭
for(int i=1;i<=1000;i++)//依次遍历每盏灯
{
if(i%3==0)//是3的倍数
a[i]=!a[i];//改变当前灯的状态 下同
if(i%5==0)
a[i]=!a[i];
if(i%7==0)
a[i]=!a[i];
if(a[i])//该编号判断完毕 判断是否亮着
num++;
}
cout<<num<<endl;
return 0;
}
版权声明:本文为weixin_44641254原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。