数组的众数问题的非分治解法
2009-12-06 13:34
288 查看
★问题描述:
给定含有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 output.txt
6 2
1 3
2
2
2
3
5
///////////////////////////////////////
由于懒得建文件我就不用文件啦,
给定含有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 output.txt
6 2
1 3
2
2
2
3
5
///////////////////////////////////////
由于懒得建文件我就不用文件啦,
#include<iostream> using namespace std; //结构体用来保存众数的元素与重数 typedef struct { int element;//元素 int sum;//重数 }zs; //快排 void sort(int a[],int s,int t)//对a[s]到a[t]的元素排序 { int i=s,j=t; int temp; if(s<t)//区间里至少存在一个元素的情况 { temp=a[s];//用区间的第一个元素做基准 while(i!=j)//区间两端交替向中间扫描,知道I=J { while(j>i&&a[j]>temp) j--;//从右向左扫描,找到第一个小于temp的a[j] if(i<j)//表示找到a[j],则a[i],a[j]交换 { a[i]=a[j]; i++; } while(i<j&&a[i]<temp) i++;//从左向右扫描,找到第一个大于temp的a[i] if(i<j)//表示找到a[i],则a[i],a[j]交换 { a[j]=a[i]; j--; } } a[i]=temp; sort(a,s,i-1);//对左递归 sort(a,i+1,t);//对右递归 } } int main() { zs m,h; m.sum=1;// h.sum=1;// int a[]={1,2,2,3,3,3,4,8,4,7,5,6,7,6,3}; int n=sizeof(a)/sizeof(a[0]); cout<<"数组的个数为:"<<n<<endl; sort(a,0,n-1); cout<<"快排后的数组元素为:"<<endl; for(int i=0;i<n;i++) { if(h.sum>m.sum) { m.sum=h.sum; // m.sum=h.sum;//用来保存当前的重数大小 m.element=h.element; // m.element=h.element;//保存当前元素 } if(a[i+1]==a[i]) { h.sum++; h.element=a[i]; } else { h.sum=1; } cout<<a[i]<<" "; //cout<<endl; } cout<<endl; cout<<"众数的元素为:"<<m.element<<" 众数的重数为:"<<m.sum<<endl; return 1; }
相关文章推荐
- 数组的众数问题的分治解法
- 数组的众数问题分治法解法
- 01背包问题的一维数组解法
- 八皇后问题一维数组解法
- 数组换位问题-比较容易理解的解法
- 寻找数组的主元素问题的解法
- 最大子数组问题-分治策略解法
- 最大子数组问题的三种解法
- T(n) = O(n) 的最大子数组问题解法
- 最长公共子串问题的后缀数组解法
- NYOJ 众数问题的三种解法
- 最长公共子串问题的后缀数组解法
- 最长公共子串问题的后缀数组解法
- 最长公共子串问题的后缀数组解法
- 算法导论-----最大子数组问题(线性解法)
- 0-1背包问题(一维数组解法)
- 【算法】逆序对问题的四种解法(归并排序,BST,树状数组,线段树)及变形
- (数组)众数问题
- RMQ问题的树状数组解法
- 最长公共子串问题的后缀数组解法