C语言 检查数组中是否有负数和重复数字

zfycwa2u  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(178)

我试着检查一个数组中有多少个负数,并检查在同一个数组中是否有重复的数字。
下面是我使用的代码:

#include<stdio.h>

int main()
{
int n = 0;
int negative_count = 0;
int duplicate_count = 0;
// input lenght of the array
scanf("%d", &n);
getchar();
int arr[n];
for(int i = 0;i < n;i++){
    //input elements of the array
    scanf("%d", &arr[i]);
    getchar();
}

int len = sizeof(arr) / sizeof(arr[0]);

for(int i=0;i<len;i++){
    if(arr[i] < 0){
        negative_count++;
    }
    for(int j= i+1;j<len;j++){
        if(arr[i] == arr[j]){
            duplicate_count++;
        }
    }
}

printf("Number of negative numbers: %d\n", negative_count);
printf("Number of duplicates: %d", duplicate_count);

return 0;
}

输入

5
1 -1 2 3 -3

输出功率

Number of negative numbers: 2
Number of duplicates: 0

负数的输出是正确的,但是副本的输出不是我想要的。它应该输出2,因为1和-1都是数字1,3和-3也是数字1。我该怎么做呢?

zxlwwiss

zxlwwiss1#

如果你真的想让1和-1算作同一个数字,你应该使用abs()函数,在搜索“重复项”时使用绝对值。

abs(-1) = 1
abs(1) = 1

-1 == 1               returns false
abs(-1) == abs(1)     returns true

还要记住包括<stdlib.h>使用abs()

xlpyo6sf

xlpyo6sf2#

我修正了我的代码,它可以工作了,只需要使用abs()函数来比较数组。我还去掉了一些不必要的代码。
下面是新代码:

#include<stdio.h>
#include<stdlib.h>

int main()
{
int n = 0;
int negative_count = 0;
int duplicate_count = 0;

// input length of the array
scanf("%d", &n);
int arr[n];

for(int i = 0;i < n;i++){
    //input elements of the array
    scanf("%d", &arr[i]);
}

for(int i=0;i<n;i++){
    if(arr[i] < 0){
        negative_count++;
    }
    for(int j= i+1;j<n;j++){
        if(abs(arr[i]) == abs(arr[j])){
            duplicate_count++;
        }
    }
}

printf("Number of negative numbers: %d\n", error_count);
printf("Number of duplicates: %d", duplicate_count);

return 0;
}

相关问题