首页 > 解决方案 > 在不存储输入的情况下查找出现频率,最小值最大值

问题描述

任务是读取 0 到 9 范围内的 N 个数字,并找出输入数字的出现频率。除此之外,我需要找到最小值和最大值以及最常见的数字。至少需要使用 3 个函数(不允许存储输入))

到目前为止,我完成了查找事件并输入了最小值和最大值。我在查找最常见的数字和创建函数时遇到问题。我为每个数字创建了单独的变量来查找频率。另外,这段代码似乎不是很好,如果您有更好的解决方案,请分享。

{
    int n=0;
    int max=0,min=9;
    int freq0=0,freq1=0,freq2=0,freq3=0,freq4=0,freq5=0,freq6=0,freq7=0,freq8=0,freq9=0;

    for (;;)
    {
        printf ("Please enter the number in range from 0 to 9 (to break enter: 11): ");
        scanf ("%d",&n);
        if (n==11)//to exit the loop 11 is setteled as a stop value
            break;
        if (n==0)
            freq0++;
        if (n==1)
            freq1++;
        if (n==2)
            freq2++;
        if (n==3)
            freq3++;
        if (n==4)
            freq4++;
        if (n==5)
            freq5++;
        if (n==6)
            freq6++;
        if (n==7)
            freq7++;
        if (n==8)
            freq8++;
        if (n==9)
            freq9++;
        if (n>max)
            max=n;
        if (n<min)
            min=n;
    }

    printf ("Number 0 occured %d times\n",freq0);
    printf ("Number 1 occured %d times\n",freq1);
    printf ("Number 2 occured %d times\n",freq2);
    printf ("Number 3 occured %d times\n",freq3);
    printf ("Number 4 occured %d times\n",freq4);
    printf ("Number 5 occured %d times\n",freq5);
    printf ("Number 6 occured %d times\n",freq6);
    printf ("Number 7 occured %d times\n",freq7);
    printf ("Number 8 occured %d times\n",freq8);
    printf ("Number 9 occured %d times\n",freq9);
    printf ("highest %d \n", max);
    printf ("smallest %d\n",min);
    return 0;
}

标签: cintegermaxmin

解决方案


#include <stdio.h>

void test(int N){
    int arr[] = {0,0,0,0,0,0,0,0,0,0};
    for (int i =0; i < N; i++){ 
        int num;
        printf ("Please enter the number in range from 0 to 9 (to break enter: 11): ");
        scanf ("%d",&num);
        if (num==11) break;
        if (num>9 || num<0){
            printf("Number is not in range 0..9! Try another number..\n");
            i--;
            continue;
        }
        arr[num]++;
    }

    int max = 0, min = 9, max_occurrences = 0, min_occurrences = N;

    for (int i = 0; i < 10; i++){
      printf ("Number %d occured %d times\n", i, arr[i]);
        max_occurrences = arr[max_occurrences] < arr[i] && arr[i]!=0? i : max_occurrences;
        min_occurrences = arr[min_occurrences] > arr[i] && arr[i]!=0? i : min_occurrences;
        max = max < i && arr[i]!=0? i : max;
        min = min > i && arr[i]!=0? i : min;


    }
    printf("max occurrences : %d \nmin occurrences : %d \nmax common : %d \nmin common : %d \n ", max_occurrences, min_occurrences, max, min);
}

int main()
{
  test(6);

  return 0;
}

推荐阅读