| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4188 人关注过本帖
标题:正负数个数
只看楼主 加入收藏
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10570
专家分:43031
注 册:2014-5-20
收藏
得分:0 
以下是引用至尊灬帝豪在2016-12-8 19:10:25的发言:

#include <stdio.h>
#define M 10
#define N 10

int main()
{
   int a[20],s,i=0,j=0;
   for(s=1;s=0&&s<=20;s++)
   {
       scanf("%d",&a[s]);
       if(a[s]>0)
        i++;
       if(a[s]<0)
        j++;
   }
   printf("i=%d\n",i);
   printf("j=%d\n",j);
    return 0;
}
我这样可以吗?

我的答案不符合题意,少了n<20条件,所以答案不对。
   int a[20],s,i=0,j=0;
   for(s=1;s=0&&s<=20;s++)
       scanf("%d",&a[s]);
这里s==20时越界

换另一种算:
#include <stdio.h>

main()
{
    int i=0, j=0, k, n=0;
    int m=sizeof(k)*8-1;
    while (++n<20)
    {
        scanf("%d", &k);
        if (k==0)
            break;
        j += (k>>m)&1;
    }
    i = n-j-1;
    printf(">0 %d\n<0 %d\n", i,j);
}

2016-12-08 22:35
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10570
专家分:43031
注 册:2014-5-20
收藏
得分:0 
以下是引用至尊灬帝豪在2016-12-8 22:12:50的发言:

如果用for循环怎么表示?个数小于20且到0到时候退出循环怎么表示?   

for(s=0, s<20; s++)
    scanf("%d",&a[s]);
    if (a[s]==0)
        break;
2016-12-08 22:45
至尊灬帝豪
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2016-11-22
收藏
得分:0 
以下是引用吹水佬在2016-12-8 22:35:34的发言:


我的答案不符合题意,少了n<20条件,所以答案不对。
   int a[20],s,i=0,j=0;
   for(s=1;s=0&&s<=20;s++)
       scanf("%d",&a[s]);
这里s==20时越界

换另一种算:
#include <stdio.h>

main()
{
    int i=0, j=0, k, n=0;
    int m=sizeof(k)*8-1;
    while (++n<20)
    {
        scanf("%d", &k);
        if (k==0)
            break;
        j += (k>>m)&1;
    }
    i = n-j-1;
    printf(">0 %d\n<0 %d\n", i,j);
}

        可是我的答案是i和j都等于0;
int m=sizeof(k)*8-1;这种函数使用还不会

  break;
        j += (k>>m)&1;
    }
    i = n-j-1;
大神,我有点看不懂
2016-12-08 22:49
至尊灬帝豪
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2016-11-22
收藏
得分:0 
回复 12楼 吹水佬
好的,谢了
2016-12-08 22:53
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:6 
条件判断配合break语句来退出循环
2016-12-08 22:56
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10570
专家分:43031
注 册:2014-5-20
收藏
得分:0 
以下是引用至尊灬帝豪在2016-12-8 22:49:09的发言:
int m=sizeof(k)*8-1;这种函数使用还不会

  break;
        j += (k>>m)&1;
    }
    i = n-j-1;
大神,我有点看不懂

(k>>m)&1 这个是取k的最高位(二进制),如果k<0时结果是1,否则是0。
数的个数是n-1,即 i+j=n-1 ==> i=n-j-1。
2016-12-08 23:00
快速回复:正负数个数
数据加载中...
 
   



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

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