|
«问题描述:
给定含有n个元素的多重集合S,每个元素在S中出现的次数称为该元素的重数。多重
集S中重数最大的元素称为众数。
例如,S={1,2,2,2,3,5}。
多重集S的众数是2,其重数为3。
«编程任务:
对于给定的由n 个自然数组成的多重集S,编程计算S 的众数及其重数。
«数据输入:
输入数据由文件名为input.txt的文本文件提供。
文件的第1行多重集S中元素个数n;接下来的n 行中,每行有一个自然数。
«结果输出:
程序运行结束时,将计算结果输出到文件output.txt中。输出文件有2 行,第1 行给
出众数,第2 行是重数。
输入文件示例 输出文件示例
input.txt
6
1
2
2
2
3
5
output.txt
2
3
这是算法...
但我还看不懂...
我认为文件操作还好弄.就算法,它是用递归来做的.
void mode(int LL,int RR)
{
int L1,R1;
int med=median(a,LL,RR);
split(a,med,LL,RR,L1,R1);
if(largest<R1-L1+1) largest=R1-L1+1;element=med;
if(L1-LL>largest) mode(LL,L1-1);
if(RR-R1>largest) mode(R1+1,RR);
}
//median用于找中位数,split用中位数将数组分2为段.
[此问题还有待解决,谢谢各位的参与!]
//首先在此文件夹下建立名为qingsongin2.txt的文件
//其内容为6 1 2 2 2 3 5 之格式.其中第一的数为数组表长度
#include<iostream>
#include<fstream>
#define MAXSIZE 20
using namespace std;
typedef int KeyLype;
typedef int Status;
typedef struct {
KeyLype key;
} RedType;
typedef struct {
RedType r[MAXSIZE + 1];
int length;
} SqList;
int SelectSort(SqList &L)
{
int i,j,t;
for(j=0;j<L.length;j++)
for(i=1;i<=L.length-j;i++)
if(L.r[i].key<L.r[i-1].key)
{
t=L.r[i].key; |
|