我正在用 C 語言撰寫一個程式,它確定陣列中最常出現的數字,并輸出最小的最常出現的數字,但是我遇到了一個錯誤,我不確定我做錯了哪一部分。
這是程式輸入的示例
2
8
1 1 2 2 3 4 5 5
8
5 5 4 3 2 2 1 1
數字 2 表示創建 2 個不同的陣列,數字 8 決定了陣列的大小。之后的數字確定要放入陣列的數字,并且程式通過輸入陣列的大小等來重復自己。
這是預期的輸出:
案例#1:2
1
案例#2:2
1
“Case #1: 2”表示最常出現的數字在陣列中出現了 2 次(數字 1 2 和 5,每個在陣列中出現了兩次),而它列印數字 1,因為數字 1 是陣列中最小的數字最常出現。案例#2 也是如此
但是,在我的程式中,當我輸入第二種情況時,它沒有正確列印最小數字,而是什么都不列印。但奇怪的是,如果我在第二個陣列中輸入不同的數字(而不是按相反順序輸入第一個陣列),它會列印正確的最小數字。這是我的程式創建的示例輸出
案例#1:2
1
案例#2:2
這是我制作的代碼:
#include <stdio.h>
int main(){
long long t, n;
scanf("%lld",&t); //masukkin berapa kali mau bikin array
for(int x=0;x<t;x ) {
scanf("%lld",&n); // masukkin mau berapa angka per array
long long arr[200000]={0};
long long i, count, freq=0, test=0;
for(i=0; i<n; i ){
scanf("%lld", &count); //masukkin angka ke dalem array
arr[count] ;
}
for(i=0; i<200000; i ){
if(arr[i]>0 && arr[i]>=freq){
freq=arr[i];
}
}
printf("Case #%d: %lld\n",x 1,freq);
int min;
for(i=0; i<200000; i ){
if (arr[i] > min){
min = arr[i];
printf("%lld",i);
test=1;
}
}
printf("\n");
}
return 0;
}
uj5u.com熱心網友回復:
你的問題在這里:
int min;
min沒有初始化,所以當你這樣做的時候你if (arr[i] > min){不知道有什么價值min。
也一樣
int min = INT_MIN;
也就是說,你真的不需要min. 第一個arr[i]等于freq 會告訴你這i是最小的數字。
進一步注意的是
long long arr[200000]={0};
是個壞主意。永遠不要將巨大的陣列定義為區域變數,因為它可能會導致堆疊溢位。使其成為全域變數或使用動態分配。
你應該改變
arr[count] ;
到
if (count >= 200000)
{
// Too big - add error handling
...
}
else
{
arr[count] ;
}
而且您不需要額外的回圈來查找freq. 查找freq何時獲得輸入。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/351539.html
下一篇:C程式在嵌套回圈期間自行結束
