abcdefj139 2024-12-02 09:21 采纳率: 0%
浏览 26

pta实验题 C语言数组

实验7-1-9 求整数序列中出现次数最多的数

本题要求统计一个整型序列中出现次数最多的整数及其出现次数。

输入格式:
输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。

输出格式:
在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。

输入样例:
10 3 2 -1 5 3 4 3 0 3 2
输出样例:
3 4

请问这段代码思路和逻辑哪里出问题了,为什么得不到正确的输出啊

#include <stdio.h>
int search(int a[],int n,int x);
int main(){
    int n,i,a[1001],cnt[1001]={0};
    scanf("%d",&n);
    int max=0;
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
    for(i=0;i<n;i++){
        if(search(a,n,a[i])<0){
            cnt[i]++;
        }
        else{
            cnt[search(cnt,n,a[i])]++;
        }
    }
    for(i=0;i<n;i++){
        if(cnt[i]>cnt[max]){
            max=i;
        }
    }
    printf("%d %d",a[max],cnt[max]);
    
}
int search(int a[],int n,int x){
    int i;
    for(i=0;i<n;i++){
        if(x==a[i]){
            return i;
        }            
    }
    return -1;
}

输入:
10 3 2 -1 5 3 4 3 0 3 2
输出:
3 1

  • 写回答

2条回答 默认 最新

  • stormsha 优质创作者: 编程框架技术领域 2024-12-02 09:33
    关注

    本答案参考GPT。若问题解决,望采纳;如仍有疑问,请评论回复。

    代码中存在几个问题,导致无法得到正确的输出:

    1. search 函数的声明应该在 main 函数之前。
    2. search 函数中使用的是 a 数组,但在 main 函数中,你实际上是想查找 cnt 数组中对应的值,但传递的是 a[i],这是不正确的。
    3. cnt 数组应该用来存储每个数字出现的次数,而不是用来存储索引。
    4. max 变量应该用来存储出现次数最多的数字的索引,而不是出现次数。
    5. search 函数应该返回找到的数字的索引,如果没有找到则返回 -1

    下面是修改后的代码:

    #include <stdio.h>
    
    // 函数声明
    int search(int a[], int n, int x);
    
    int main() {
        int n, i, a[1001], cnt[1001] = {0};
        scanf("%d", &n);
        for (i = 0; i < n; i++) {
            scanf("%d", &a[i]);
        }
        for (i = 0; i < n; i++) {
            cnt[a[i]]++;
        }
        int maxIndex = 0; // 存储出现次数最多的数字的索引
        for (i = 0; i < n; i++) {
            if (cnt[a[i]] > cnt[maxIndex]) {
                maxIndex = a[i];
            }
        }
        printf("%d %d", maxIndex, cnt[maxIndex]);
        return 0;
    }
    
    // 函数定义
    int search(int a[], int n, int x) {
        int i;
        for (i = 0; i < n; i++) {
            if (x == a[i]) {
                return i;
            }            
        }
        return -1;
    }
    

    这段代码首先读取整数个数 nn 个整数,然后使用 cnt 数组来统计每个数字出现的次数。接着,通过遍历 cnt 数组找到出现次数最多的数字,并输出该数字及其出现次数。注意,search 函数在这个版本的代码中实际上是不需要的,因为我们直接使用 cnt 数组来统计每个数字的出现次数。

    评论

报告相同问题?

问题事件

  • 创建了问题 12月2日