c - 在不存储输入的情况下查找出现频率,最小值最大值
问题描述
任务是读取 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;
}
推荐阅读
- prettier - 在更漂亮的情况下禁用 printWidth
- docker - 他们如何创建如此小的操作系统映像?
- angular - Angular 6 中的单例服务并发
- machine-learning - 使用机器学习进行模式识别
- c++ - 如何在 Qt 项目中指定 -W4 (Visual Studio)?
- django - 在 Django 视图中与线程共享会话
- android - 如何使用改造正确地制作可重用类来捕获响应数据?
- c++ - 如何在纳秒内制作 gprof 报告?
- ios - 我应该将底部工作表作为子视图添加到当前视图控制器还是推送一个添加了子视图的 UIWindow?
- python - pandas 中的行排序和子排序