首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一种快速测试所有数组元素是否为零的方法

一种快速测试所有数组元素是否为零的方法
EN

Stack Overflow用户
提问于 2021-04-12 22:37:29
回答 7查看 226关注 0票数 4

我想知道如何清理第一个if语句。我试着在网上找,什么也没找到。

我正在写一个程序来测试用户输入的数字是否有重复的数字。我已经设法创建了一个由10个元素组成的布尔数组(a10),如果ai等于0,这意味着数字'i‘在键入的数字中最多出现一次。如果ai等于1,则数字'i‘在键入的数字中至少出现两次(因此重复出现)。注意0<=i<=9。

现在我试着分析这个数组中的值,如果所有的值都等于零,那么我们输入“重复的数字”。如果不是,我们会说哪些数字是重复的。

代码语言:javascript
复制
if(a[0] == 0 && a[1] == 0 && a[2] == 0 && a[3] == 0 && a[4] == 0 && a[5] == 0 && a[6] == 0 && a[7] == 0 && a[8] == 0 && a[9] == 0)  
       printf("No repeated digits");
  
else  
  printf("Repeated digits: "); 
  for(i = 0; i < 10; i++) {
        if(a[i] == 1)
        printf("%d ", i); 
    }   

我找不到一种方法来结合使用for循环和if循环来清理第一个if语句。我试过上网找,但找不到解决方案。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2021-04-12 22:44:02

或使用:

代码语言:javascript
复制
for (i=0; i<10; i++)
    if (a[i])
        break;

if (i==10) printf("No repeated digits");
else {
    //...
}
票数 4
EN

Stack Overflow用户

发布于 2021-04-12 22:47:01

这里有一个检查数组是否所有元素都等于N的技巧:

代码语言:javascript
复制
if (a[0]==N && memcmp(a, a+1, (array_length-1)*sizeof(a[0]) ) == 0)
    printf("All equal to N\n");

在这种情况下,您可以执行以下操作:

代码语言:javascript
复制
if (a[0]==0 && memcmp(a, a+1, 9*sizeof(a[0]) ) == 0)
    printf("All zeros\n");

这段代码显式地检查第一个元素是否为零,然后memcmp将为您执行以下检查:

代码语言:javascript
复制
a[0] == a[1] && a[1] == a[2] &&....

这不需要像其他memcmp -based answers那样额外分配和初始化零数组。

票数 9
EN

Stack Overflow用户

发布于 2021-04-12 22:41:35

您可以使用标志来指示是否找到非零元素。

代码语言:javascript
复制
int nonzero_found = 0;

for(i = 0; i < 10; i++) {
    if (a[i] != 0) {
        nonzero_found = 1;
        break;
    }
}

if (nonzero_found) {
    printf("Repeated digits: "); 
    for(i = 0; i < 10; i++) {
        if(a[i] == 1)
            printf("%d ", i); 
    }
} else {
    printf("No repeated digits");
}

或者,如果您真的想打印Repeated digits:,即使没有重复的数字(就像您的原始代码一样):

代码语言:javascript
复制
int nonzero_found = 0;

for(i = 0; i < 10; i++) {
    if (a[i] != 0) {
        nonzero_found = 1;
        break;
    }
}

if (!nonzero_found) {
    printf("No repeated digits");
}

printf("Repeated digits: "); 
for(i = 0; i < 10; i++) {
    if(a[i] == 1)
        printf("%d ", i); 
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67060385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档