#include <stdio.h>
#include <string.h>
#include <malloc.h>
//数值相等允许的误差叫容差,两数相差小于容差就叫相等,如容差dTolerate = 0.1,就认为1.01 和1.02相等,但1.1和1..2不相等
struct NumBuf
{
double data;
int apperTime;
NumBuf *next;
};
int StatisticsTimes( double* pNumberArray, //要统计的数值的数组
long lNumSize, // 要统计的数值的个数
double dTolerate, //容差
NumBuf *resNum ); //result
void MakeList(double& num, NumBuf* head, double dTolerate)
{
int i = 0;
NumBuf* p = head;
NumBuf* q = p->next;
//如果是查找p初始为head->next;
//如果是尾插p需要初始为head
while (q != NULL && (( q->data - dTolerate) > num || (q->data + dTolerate) < num ) )
{
p = q;
q = q->next;
}
if ( q == NULL)
{
p->next = new NumBuf();
p = p->next;
p->data = num;
p->apperTime = 1;
p->next = NULL;
printf("%d. Data:%6d\n",i++,num);
}
else
{
q->apperTime++;
}
}
void Sort(NumBuf& a, NumBuf& b, NumBuf& c)
{
//a > b > c
if (a.apperTime < b.apperTime)
{
NumBuf tmp = a;
a = b;
b = tmp;
} //a > b
if (a.apperTime < c.apperTime)
{
NumBuf tmp = a;
a = c;
c = tmp;
}//a > c
if (b.apperTime < c.apperTime)
{
NumBuf tmp = b;
b = c;
c = tmp;
}//b > c
}
int StatisticsTimes( double* pNumberArray, long lNumSize, double dTolerate, NumBuf *resNum )
{
NumBuf* head = new NumBuf();
NumBuf *p;
head->next = NULL;
for (int i = 0; i < lNumSize; i++)
{
MakeList(pNumberArray[i], head, dTolerate);
}
p = head->next;
for (i = 0; i < 3; i++ )
{
resNum[i] = *p;
p = p->next;
if (p == NULL)
return i;
}
Sort(resNum[0], resNum[1], resNum[2]);
while(p != NULL)
{
if (p->apperTime > resNum[2].apperTime)
{
resNum[2] = *p;
Sort(resNum[0], resNum[1], resNum[2]);
}
p = p->next;
}
return 3;
}
void main()
{
long length;
double lerate;
NumBuf resNum[3];
double *num, *seek;
printf("输入您要输入的数值个数:");
scanf("%d",&length);
printf("请设置容差:");
scanf("%lf", &lerate);
num = (double*) malloc(length * sizeof(double));
seek = num;
printf("输入数据");
for (int i = 0; i < length; i++)
{
scanf("%lf",(seek+i));
}
for (i = 0; i < length; i++)
{
printf("%d:%6f\n",i,*(seek+i));
}
i = StatisticsTimes(num, length, lerate, resNum);
for (int j = 0;j < i; j++)
{
printf("Data:%6f || 出现次数:%4d\n", resNum[j].data, resNum[j].apperTime);
}
while (i--)
getchar();
}
没有合适的资源?快使用搜索试试~ 我知道了~
判断数组中数字出现的频率,并依次输出前三的数及频率
共13个文件
pdb:2个
cpp:1个
plg:1个
4星 · 超过85%的资源 需积分: 9 8 下载量 90 浏览量
2010-11-10
18:24:46
上传
评论 1
收藏 191KB RAR 举报
温馨提示
中地的机试题,当时指针操作出了问题,让我很蛋疼。 回来改改,上传吧,挣点分数出来。 麻烦给点意见 其实可以用数组操作,不过这个更适合大批量数据
资源推荐
资源详情
资源评论
收起资源包目录
appearTime.rar (13个子文件)
MyFunction
main.cpp 2KB
MyFunction.dsw 528B
MyFunction.ncb 49KB
MyFunction.dsp 4KB
MyFunction.opt 48KB
MyFunction.plg 1KB
Debug
vc60.pdb 52KB
MyFunction.pdb 457KB
vc60.idb 33KB
MyFunction.ilk 226KB
main.obj 7KB
MyFunction.pch 199KB
MyFunction.exe 200KB
共 13 条
- 1
资源评论
- Shc3672013-12-17程序还算不错 只不过不是我需要的类型 并且本人初学者 有些地方还不是很能看懂意思 不过还是谢谢你啦
- limin01082013-02-28这个程序还是不错的,谢谢分享。
y2352258
- 粉丝: 5
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功