标题:一条简单的练习题但运行结果不知哪里出问题了~
只看楼主
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
结帖率:99.25%
已结贴  问题点数:20 回复次数:19 
一条简单的练习题但运行结果不知哪里出问题了~
150盏亮着的灯,各有一个开关控制着,按照顺序编号1、2、3、.....150.将编号为3的倍数的拉一次,再将编号为5的倍数的灯拉一下,拉完后还亮着的灯数量为多少盏?
程序代码如下~

程序代码:
#include<stdio.h>
#include<stdlib.h>
#define N 150
#define S(a) sizeof (a)/sizeof (a[0])
void fun(int a[],int s)
{    
    int i=0;
    
    for (i=s;i<N+1;i+=s)
         a[i]++;
}
int main()
{
    int a[N+1]={0};
    int b[]={3,5};
    int len=S(b);
    
    int i=0;
    int count=0;

    for (i=0;i<len;i++)
        fun(a,b[i]);
        
    for (i=1;i<N+1;i++)
        a[i]%=2;
        
    for (i=1;i<N+1;i++)
        if (a[i]==0)
            count++;
            
     printf("%d\n",count);
     
     return 0;
}


此题正确答案是90~但为什么这个程序的运算结果会是92?百思不得其解~不知道是哪里出问题了~求解~
搜索更多相关主题的帖子: 练习题 开关 
2017-02-04 01:20
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:3 
是90啊。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-02-04 05:28
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
琢磨了半天,终于得出正确答案。
有的时候不得不感叹我的智商真低。

程序代码:
#include<stdio.h>
#include<stdlib.h>
struct deng {int bianhao;
             int biaoji;};
#define N 150
#define J 3
#define K 5

int main(void)
{
    struct deng a[N];
    int c = 0;
    int i;
    for(i = 0; i < 150; i++){
        a[i].bianhao = i + 1;
        a[i].biaoji = 1;} 

    for(i = 0; i < 150; i++)
        if(!(a[i].bianhao % J) )
           a[i].biaoji = 0;

    for(i = 0; i < 150; i++)
        if(!(a[i].bianhao % K))
        {
           if(a[i].biaoji)
              a[i].biaoji = 0;
           else
              a[i].biaoji = 1;
        }

    for(i = 0; i < 150; i++)
        if(a[i].biaoji)
            c++;

    printf("%d\n",c);

    return 0;
}


[此贴子已经被作者于2017-2-4 09:57编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-02-04 05:43
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:3 
#include<stdio.h>
#define N 150
main()
{
    int a[N+1];
    int i, count=0;
    for (i=1; i<N+1; i++)
        a[i] = i%3;
    for (i=1; i<N+1; i++)
        a[i] = i%5 ? a[i] : !a[i];
    for (i=1; i<N+1; i++)
        if (a[i])
            count++;
    printf("%d\n",count);
}
2017-02-04 06:04
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
明白了~我那个编译器int a[N+1]={0};内存块没有完全清零~用memset清零就没事了~



[此贴子已经被作者于2017-2-4 08:22编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-04 08:10
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 3楼 renkejun1942
以下是引用renkejun1942在2017-2-4 05:43:37的发言:

为什么我的答案是80?你确定答案真的是90吗?


是90~其实这是一条易错题~参考~

http://blog.

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-04 08:15
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 4楼 吹水佬
代码很精炼~拜谢高人~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-04 08:17
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
总结~以前我用vc编译器时没有出现5楼这种情况~是用手机换了个编译器C4droid才是这样的~也就是说为了使程序具有可移植性和出于保险起见~如果数组要用到赋初值0~最好用memset初始化一下内存数据~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-02-04 08:27
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:3 
#include<stdio.h>
#define N 150
main()
{
    int i, count=N;
    for (i=1; i<N+1; i++)
    {
        if(i%3==0)            
            count--;
        if(i%5==0&&i%3!=0)   
            count--;
        if(i%5==0&&i%3==0)
            count++;
    }         
    printf("%d\n",count);
}
2017-02-04 09:12
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
得分:3 
#include <stdio.h>
int main()
{
    int i,count1=0,count2=0;
    for(i=1;i<=150;i++){
    if(i%5!=0&&i%3!=0)
        count1++;
    if(i%5==0&&i%3==0)
        count2++;
    }
    printf("%d",count1+count2);
    return 0;
 }

Code is my life.
2017-02-04 09:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-473960-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019271 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved