在不存储输入的情况下查找出现频率,minmax

Find frequency of occurrence, minmax without storing input

任务是读取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;
}
#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;
}
#include <stdio.h>
#include <limits.h>

#define MIN(a,b) (((a)<(b))?(a):(b))
#define MAX(a,b) (((a)>(b))?(a):(b))

int main(void) {
    int n=0;
    int value_max=INT_MIN;
    int value_min=INT_MAX;
    int freq[10] = {0};

    for(;;)
    {
        printf ("Please enter the number in range from 0 to 9 (to break enter: 11): \n");
        scanf ("%d",&n);
        if (n==11) break;
        freq[n]++;
        value_max = MAX(n, value_max);
        value_min = MIN(n, value_min);
    }

    for(n=0; n<10; ++n)
    {
        if (freq[n] == 0) continue;
        printf("Frequency of %d : %d\n", n, freq[n]);
    }
    printf("Maximum value : %d\n", value_max);
    printf("Minimum value : %d\n", value_min);

    return 0;
}

测试输入

4 5 6 1 2 3 4 5 6 11

输出

Frequency of 1 : 1
Frequency of 2 : 1
Frequency of 3 : 1
Frequency of 4 : 2
Frequency of 5 : 2
Frequency of 6 : 2
Maximum value : 6
Minimum value : 1

试试这个。

#include <stdio.h>

int min(int a, int b) { return (a < b) ? a : b; }
int max(int a, int b) { return (a > b) ? a : b; }
int valid(int n) { return (n >= 0 && n <= 9) ? 1 : 0; }

int main() {
    int i, n, min_number = 10, max_number = -1, max_frequency = 0;
    int freq[10] = {0,0,0,0,0,0,0,0,0,0};

    // Read all numbers from input (read until end of file or press Ctrl+Z in console)
    while (scanf("%d", &n) > 0) {
        if (valid(n) == 0) {
            printf("Number %d is invalid and will be ignored\n", n);
            continue;
        }
        freq[n] += 1;
        min_number = min(min_number, n);
        max_number = max(max_number, n);
        max_frequency = max(max_frequency, freq[n]);
    }

    printf("Occurences of digits:\n");
    for (i = 0; i < 10; i++)
        printf("Number %d occured %d times\n", i, freq[i]);
    printf("\n\nMin value: %d\n", min);
    printf("Max value: %d\n", max);

    // Print numbers with greatest frequency
    printf("\n\nMost common numbers: ");
    for (i = 0; i < 10; i++) {
        if (freq[i] == max_frequency)
            printf("%d\n", i);
    }
    return 0;
}