我被要求從一組元素和具有所述頻率的所有元素中找到最高頻率。我的代碼似乎作業得很好,但是當我提交它時似乎某處有錯誤。誰能幫我找出錯誤?
格式輸入: 第一行包含一個整數 T,表示測驗用例的數量。對于每個測驗用例,第一行包含一個整數 N,表示陣列中元素的數量。下一行包含 N 個整數 Xi (1≤i≤N),表示陣列中的第i個元素。
格式輸出: 由 T 行組成,其中每行的格式為“Case #X: Y”,其中 X 是從 1 開始的測驗用例編號,Y 是最高頻率。下一行包含按升序排列該頻率的所有元素。
約束條件: 1 ≤ T ≤ 20 | 2 ≤ N ≤ 20.000 | 1 ≤ Xi ≤ 2 × 10^5
樣本輸入:
3
8
1 1 2 2 3 4 5 5
8
5 5 4 3 2 2 1 1
4
1 1 1 3
示例輸出:
Case #1: 2
1 2 5
Case #2: 2
1 2 5
Case #3: 3
1
這是我的代碼:
#include <stdio.h>
int main() {
int T, N[20];
scanf("%d", &T); getchar();
int A[T][20000];
for (int i = 0; i<T; i ) {
scanf("%d", &N[i]); getchar();
for (int j = 0; j<N[i]; j ) {
scanf("%d", &A[i][j]); getchar();
}
int X = 0;
for (int j = 0; j<N[i]; j ) {
for (int k = j 1; k<N[i]; k ) {
if (A[i][k]<A[i][j]) {
X = A[i][j];
A[i][j] = A[i][k];
A[i][k] = X;
}
}
}
}
int f[20000];
for (int i = 0; i<T; i ) {
int c = 0, mc = 0;
for (int j = 0; j<N[i]; j ) {
c = 1;
if(A[i][j] != -1) {
for (int k = j 1; k<N[i]; k ) {
if (A[i][j] == A[i][k]) {
c ;
A[i][k] = -1;
}
}
f[j]=c;
}
if (c>mc) {
mc = c;
}
}
printf("Case #%d: %d\n", i 1, mc);
for (int j = 0; j<N[i]; j ) {
if (A[i][j] != -1) {
if (f[j] == mc) {
printf ("%d", A[i][j]);
if (j<N[i]-1) {
printf(" ");
}
}
}
}
printf("\n");
}
return 0;
}
編輯 所以我制作了另一個代碼,而不是一次輸入所有陣列并一次輸出所有內容,該代碼在我輸入第一個數字陣列后輸出頻率和元素。但似乎代碼仍然有問題,我找不到在哪里...... Ps 我對此很陌生,所以我為我的代碼缺乏效率而道歉。
新代碼
#include <stdio.h>
int main() {
int T, N;
scanf("%d", &T); getchar();
int A[20000];
for (int i = 0; i<T; i ) {
scanf("%d", &N); getchar();
for (int j = 0; j<N; j ) {
scanf("%d", &A[j]); getchar();
}
int X;
for (int j = 0; j<N; j ) {
for (int k = j 1; k<N; k ) {
if (A[k]<A[j]) {
X = A[j];
A[j] = A[k];
A[k] = X;
}
}
}
int f[N], c = 0, mc = 0;
for (int j = 0; j<N; j ) {
c = 1;
if(A[j] != -1) {
for (int k = j 1; k<N; k ) {
if (A[j] == A[k]) {
c ;
A[k] = -1;
}
}
f[j]=c;
if (c>mc) {
mc = c;
}
}
}
printf("Case #%d: %d\n", i 1, mc);
for (int j = 0; j<N; j ) {
if (A[j] != -1) {
if (f[j] == mc) {
printf ("%d", A[j]);
if (j<N-1) {
printf(" ");
}
}
}
}
printf("\n");
}
return 0;
}
uj5u.com熱心網友回復:
我花了幾天時間,但我終于知道如何做到這一點。顯然,它并不像我想象的那么復雜……這是作業代碼。感謝所有幫助過的人:)
#include <stdio.h>
int main() {
int T, N;
scanf("%d", &T);
for (int i = 0; i<T; i ) {
scanf("%d", &N); getchar();
//INPUT elements and counting frequncy for each element
int f[200001] = {0}, E = 0;
for (int j = 0; j<N; j ) {
scanf("%d", &E); getchar();
f[E] ;
}
//find max frequency and how many elements with max frequency
int max = 0, c = 0;
for (int j = 1; j<200001; j ) {
if (f[j] == max) {
c ;
}
if (f[j]>max) {
max = f[j];
c = 1;
}
}
//OUTPUT result
printf("Case #%d: %d\n", i 1, max);
int counter = 0;
for (int j = 1; j<200001; j ) {
if (f[j] == max) {
counter ;
if (counter<c){
printf("%d ", j);
} else {
printf("%d\n", j);
}
}
}
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/340401.html