0
已解决
王梓澳
中级光能
中级光能
代码:
#include <iostream>
using namespace std;
int main ()
{
int a[1001]={1},n,j=0;
cin>>n;
for (int i=1;i<=n;i++)
{
if (i%2==0)
{
if (a[i]==1)
a[i]=0;
if (a[i]==0)
a[i]=1;
}
if (i%3==0)
{
if (a[i]==1)
a[i]=0;
if (a[i]==0)
a[i]=1;
}
}
for (int i=1;i<=n;i++)
{
if (a[i]==1)
j++;
}
cout<<j;
return 0;
}
题目:
2064 房门开开
题目描述 Description
笑笑家有 n 个房间,编号分别是 1 ~ n 。笑笑的爸爸把所有的门都打开了,笑笑妈把所有编号为 2 的倍数的门做相反的处理(原来打开的门关上,原来关上的门打开),笑笑把所有编号是 3 的倍数的房门做相反的处理。
问最后有几间房间的门是打开的?
输入描述 Input Description
一个整数 n,表示有 n 个房门
输出描述 Output Description
一个整数 m,表示最后有 m 个房门是打开的
样例输入 Sample Input
4
样例输出 Sample Output
1
题目网址:2064 房门开开
0
已采纳
张国鉴
资深守护
资深守护
bool a[1001];
int n,j=0;
cin>>n;
memset(a,true,sizeof(a));
for (int i=1;i<=n;i++)
{
if (i%2==0) a[i]=!a[i];
if (i%3==0) a[i]=!a[i];
}
for (int i=1;i<=n;i++)
{
if (a[i]) j++;
}
找你改的核心
加头文件
#include<cstring>
2
方亦欧
新手光能
新手光能
你这一题有两个错误:
1:数组的初始化。
你写了a[1001]={1},然而它的作用仅仅是把a数组的第一个元素赋为了1,而其他元素会被赋0。在C++中,如果你在定义时赋了一个元
素的值,其他元素都会为0;如果不赋值,则数组的每一个元素为随机值。
如:
int a[10]={1},a数组每一个元素的值为1,0,0,0,0,0,0,0,0,0。
int a[10],a数组的每个元素值随机。
2:判断后处理的错误。
if (a[i]==1)
a[i]=0;
if (a[i]==0)
a[i]=1;
这是你做的“相反处理”。但是你可以想一下,如果a[i]=1,程序会先将它赋值为0,但是在执行下一条语句时,判断条件a[i]==0又被
满足,a[i]又会被赋值为1,结果相当于没有做出处理。
其实只要写一条语句就可以了:
a[i]=!a[i];
看懂了吗?
方亦欧在2018-02-06 14:47:10追加了内容
初始化数组为1可以用memset函数:
memset(a,1,sizeof(a));
但是这时就要把数组定义成布尔型,并加头文件cstring。
此外,你也可以通过循环完成任务。
0
于子轩
初级守护
初级守护
1:数组范围可能不够大;
2;a数组改为bool型;
核心代码如下:
bool a[20010];
for(int i=1;i<=n+10;i++)
a[i] = true;
for(int i=2;i<=n;i+=2)
a[i] = !a[i];
for(int i=3;i<=n;i+=3)
a[i] = !a[i];
for(int i=1;i<=n;i++)
if(a[i])
count++;
如果觉得不错的话,求采纳
0
0