当前位置: 首页 > 知识库问答 >
问题:

查找数组中出现最多的数字-C问题

湛博易
2023-03-14

正如你们在问题中看到的,我有这个问题。我的意思是,我真的看不出有什么问题,也许是一些愚蠢的事情,但我不能解决它。这是代码:

#include <stdio.h>
int main() {
    int i,n;
    int niz[100];
    int brojac[100]={0};
    int maxi,mini;
    printf("Sada unesi clanove niza: \n");
    for(i=0;i<100;i++) {
        scanf("%d",&niz[i]);
        if(niz[i]==-1) {
            printf("Unijeli ste -1, a to znaci kraj unosenja clanova niza.\n");
            break;
        }
        if(niz[i]<0 || niz[i]>100){
            printf("Pogresan unos. On se nece pikati.\n");
            i--;
        }
    }
    n=i;

    //POVECAVAMO VRIJEDNOST NEKIH CLANOVA HISTOGRAMA(SVI CLANOVI VEC POSTOJE, I INICIJALIZOVANI SU NULOM)
    for(i=0;i<n;i++) {
        brojac[niz[i]]++;
    }
    maxi=0;
    mini=-1;

    //Nadji INDEX NAJVECEG ELEMENTA HISTOGRAMA
    for(i=0;i<=100;i++) {
        if(brojac[i]>brojac[maxi]) {
            maxi=i;
        }
        if(brojac[i]>0 && (mini==-1 || brojac[i]<brojac[mini])) { 
            mini=i;
        }
    }

    printf("Element niza koji se ponavlja najveci broj puta(a koji je i najamnji ako takvih brojeva ima vise je: %d\n",maxi);
    printf("Element niza koji se ponavlja najmanji broj puta(a koji je i najamnji ako takvih brojeva ima vise je: %d",mini);
    return 0;
}

共有2个答案

严宇
2023-03-14
for(i=0;i<=100;i++) -> for(i=0;i<100;i++)
窦成荫
2023-03-14

因此,该程序试图确定在1到100(包括1和100)之间输入的最常出现的数字。您的html" target="_blank">方法是将100个数字存储在数组niz[]中,然后遍历该数组,并将一个数字在另一个数组brojac[]的等价索引中出现的次数存储起来。所以如果nix[1]= 8那么bro JAC[8];

另一种解决方案是将数字读入临时值,如果它在范围内,则增加存储在数组中数字索引处的值。确保首先将 nix[] 上的所有值初始化为零。

示例:输入了3。3存储在temp中。3在范围内,因此niz[temp]= niz[temp];

但无论如何,问题是

maxi=0;
mini=-1;

//Nadji INDEX NAJVECEG ELEMENTA HISTOGRAMA
for(i=0;i<=100;i++) {// here
    if(brojac[i]>brojac[maxi]) {
        maxi=i;
    }
    if(brojac[i]>0 && (mini==-1 || brojac[i]<brojac[mini])) { // and  here
        mini=i;
    }
}

那一行'if(brojac[i]

对于 i=0 且 mini = -1 读取“如果(布罗杰克[0]

brojac[-1]不存在,因为您是引用内存中的某个随机点,可以包含任何内容。

更正是:

maxi=1;
mini=1;

//Nadji INDEX NAJVECEG ELEMENTA HISTOGRAMA
for(i=1;i<=100;i++) {// i was set to zero, it's set to one cause the range the code accepts is between 1 and 100
    if(brojac[i]>brojac[maxi]) {
        maxi=i;
    }
    if(brojac[i]<brojac[mini]) { 
        mini=i;
    }
}
 类似资料:
  • 查找字符串中出现最多的字符和个数? 如 sdsdsddssssssdd -> 字符最多的是s,出现9次 思路说明 利用python中的collections模块的Counter,查此函数详细内容.对字符串进行统计。 然后将结果转化为字典类型。 特别注意,在字符串中可能会出现数量并列第一的字符,因此要通过循环找出最大数之后,再通过循环找出最大数对应的字母(键)。 解答1(python) import

  • 我正在尝试解决一个leetcode类型问题,这是一个实践问题,它伴随着即将到来的代码测试,我需要为工作做一个,我遇到了麻烦。任何人都可以帮助我了解出了什么问题? 我基本上是在寻找暴力选项,因为我不知道algos/DS。 编写一个函数: 功能溶液(A); 给定一个包含 N 个整数的数组 A,返回 A 中未出现的最小正整数(大于 0)。 例如,给定A = [1,3,6,4,1,2],函数应该返回5。

  • 问题内容: 我希望能够在数字数组中找到最接近的较小值。例如,如果我有: 我正在寻找小于以下值的最接近值: 该函数将返回: 另外,如果我传递的数字大于数组中的最大值,则它应返回最大值。如果我传递的数字小于最小值,则应返回nil。 我尝试使用数组上的函数执行此操作,但是单独执行此操作不会产生我想要的结果,因为我需要这样的东西: 但不幸的是,这是无效的。有什么建议?我知道可以使用while循环轻松完成此

  • 问题内容: 给你一个整数数组。除一次外,所有数字出现偶数次。您需要找到出现奇数次的数字。你需要用 o(n) 时间复杂度和 o(1) 空间复杂度来解决它。 例如: 问题答案: 解决方案 1:使用两个 for 循环并比较元素: 这是这个问题的蛮力解决方案,但它需要 o(n*n) 时间复杂度。 解决方案 2:使用Hashing 您可以将 key 用作数字并将 count 用作值,每当 key 重复时,您

  • 问题内容: 在字符串数组中找到最长的字符串有一种简便的方法吗? 像什么? 问题答案: var longest = arr.sort(function (a, b) { return b.length - a.length; })[0]; 可能更有效,但仅自Javascript 1.8 / ECMAScript5起可用,并且在较旧的浏览器中默认不可用:

  • 本文向大家介绍查找一个数字,该数字将C ++中的最大数组元素相除,包括了查找一个数字,该数字将C ++中的最大数组元素相除的使用技巧和注意事项,需要的朋友参考一下 在本教程中,我们将找到在给定数组中划分为最大元素的数字。 让我们看看解决问题的步骤。 初始化数组和变量以存储结果。 遍历数组。 如果当前元素可被数组元素整除,则增加计数器。 初始化计数器变量。 再次遍历数组。 如果当前计数最大,则更新结