我試圖檢查一個陣列中有多少個負數,并檢查同一個陣列中是否有任何重復的數字。
這是我正在使用的代碼:
#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 都排在第一位,3 和 -3 也是如此。我該怎么辦?
uj5u.com熱心網友回復:
如果您確實希望 1 和 -1 計為相同的數字,則應在搜索“重復項”時使用 abs() 函式來使用絕對值。
abs(-1) = 1
abs(1) = 1
-1 == 1 returns false
abs(-1) == abs(1) returns true
還記得包含 <stdlib.h> 以使用 abs()
uj5u.com熱心網友回復:
我修復了我的代碼并且它可以作業,只需要使用 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;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/532062.html
標籤:数组Cfor循环
下一篇:我想檢查學生的分數,基于平均分
