用C语言编写一个程序:从键盘输入n(0<N<100)个整数,计算并输出其中出现次数最多且数值最大的元素。

急用!谢谢!

1:次数最多
2:在次数最多的基础上,数值最大
_______________________________________________以下为程序:
#include <iostream>
// 设置最大值
#define MAX 100
typedef struct record
{
int number[MAX];
int counter[MAX];
}record;

int isExist(int array[], int index, record rd)
{
int i;
int flag = -1;
bool finish = true;
for (i = 0; i < index && finish; i++)
{
if (array[index] == rd.number[i])
{
flag = i;
finish = false;
}
}
return flag;
}

int findMaxNumber(record rd, int index)
{
int i = 0;
int flag = 0;
int maxNumber = rd.number[0];
int maxCounter = rd.counter[0];
while (i < index)
{
if (rd.counter[i] > maxCounter)
{
flag = i;
maxNumber = rd.number[i];
maxCounter = rd.counter[i];
}
else if (rd.counter[i] == maxCounter)
{
if (rd.number[i] > maxNumber)
{
flag = i;
maxNumber = rd.number[i];
maxCounter = rd.counter[i];
}
}
i++;
}
return flag;
}

int main()
{
int i;
int N;
int arr[MAX];
record rd;
int ct;
int find;
// 初始化结构体
for (i = 0; i < MAX; i++)
{
rd.counter[i] = 0;
rd.number[i] = 0;
}
// 输入整数的个数N
printf("Enter N (0<N<100): ");
scanf("%d", &N);
// 采用数组记录输入的整数
printf("Enter %d number : ", N);
for (i = 0; i < N; i++)
{
scanf("%d", &arr[i]);
}
ct = 0;
i = 0;
while (i < N)
{
int tempFlag;
tempFlag = isExist(arr, i, rd);
if (tempFlag == -1)
{
rd.number[ct] = arr[i];
rd.counter[ct]++;
ct++;
}
else
{
rd.counter[tempFlag]++;
}
i++;
}
find = findMaxNumber(rd, ct);
printf("Max Number: %d, Max Counter: %d\n", rd.number[find], rd.counter[find]);
return 0;
}
——————————————————————————————
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-02-22
#include<stdio.h>
#define NUM 100//把此处的宏定义成100就是你想要的100个职工了
struct WorkerInfo
{
char Number[10];
char name[10];
float wage;
};
float arg,*point=&arg;//为了正确使用浮点数,此处务必如此定义
void main()
{
struct WorkerInfo wi[NUM];
int i;
float sum=0;
for(i=0;i<NUM;i++)
{
printf("Please input the %d woker's information:",i+1);
scanf("%s",wi[i].Number); /* Number 为数组名,不加&*/
scanf("%s",wi[i].name);
scanf("%f",&wi[i].wage);
sum+=wi[i].wage;
}
printf("\nThe average wage is :%f\n",sum/NUM);
printf("Number name wage\n");
for(i=0;i<NUM;i++)
{
if(wi[i].wage<300.00)
printf("%s,%s,%6f\n",wi[i].Number,wi[i].name,wi[i].wage);
}
}
//楼主的程序完全正确,基本不用修改,
//可以把宏定义成3来验证程序的正确与否,
//注意输入的方式,先输入数字,然后回车,
//再输入名字再回车,再输入工资,然后就会转到第二个人了,不然会出错的追问

好似答非所问哦!

参考资料:百度一下

第2个回答  2011-02-22
#include <stdio.h>

void sort(int *list,int n)
{
int i,j;
for(i=0,--n;i!=n;i++)
for(j=0;j!=n-i;j++)
if(list[j]<list[j+1])
list[j]^=list[j+1]^=list[j]^=list[j+1];
}

int main()
{
#define MAX 100
int list[MAX],n,i,t,len=0,best_len=0,best_t;

do
{
scanf("%d",&n);
if(n<=100&&n>=1)
break;
printf("illegal input.please inter again.\n");
}while(1);
for(i=0;i!=n;i++)
scanf("%d",&list[i]);
sort(list,n);
for(i=0,best_t=t=list[0];i!=n;i++)
if(list[i]==t&&i!=n-1)
{
++len;
}else
{
++len;
if(len>best_len)
{
best_len=len;
best_t=t;
}
t=list[i];
len=1;
}
printf("len:%d\ninteger:%d",best_len,best_t);
}
相似回答