在不存储输入的情况下查找出现频率,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;
}
任务是读取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;
}