问题标题: 酷町堂:求大神求解2064 房门开开,谢谢!(找错误~)

0
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
郑怡翔
郑怡翔
初级天翼
初级天翼

这段代码的错误:

1.数组类型错误

数组类型应是bool型,1是开,0是关(反过来也行)

2.错误,因为两个连if不会跳过,而是根据顺序结构接着判断

if (a[i]==1)
                a[i]=0;
            if (a[i]==0)
                a[i]=1;

3.a[1001]={1}错误,可以用for循环:

for(i=1;i<=n;i++)
    {
        a[i]=1;
    }

提醒:尽量分两个for循环操作笑笑妈(编号2的倍数)和笑笑(编号3的倍数)

我要回答