读书人

九度OJ第1057程序RE.多谢

发布时间: 2013-03-27 11:22:42 作者: rapoo

【求助】九度OJ第1057程序RE.谢谢


#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct n{
int number; //输入的数字
int cnt; //该数字的次数
};
int compare(n ,n );
n num[10];/*={{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}};*/

int main()
{

int n=0,count=0;
int temp=0;
while(1){
for(int i=0;i<10;i++){
num[i].number=0;
num[i].cnt=0;

}
while(scanf("%d",n)!=EOF&&n>0&&n<11){

num[n].number=n;
num[n].cnt++;

count++;

if(19==count){

sort(num,num+10,_compare);
temp=num[0].cnt;
for(int k=0;k<10;k++){

if(temp==num[k].cnt&&19==count){

printf("%d\n",num[k].number);

}
}
}

}

}
return 0;
}

//比较
int compare(n a,n b){

return a.cnt>b.cnt;
}


题目:
题目描述:
输入20个数,每个数都在1-10之间,求1-10中的众数(众数就是出现次数最多的数,如果存在一样多次数的众数,则输出权值较小的那一个)。
输入:
测试数据有多组,每组输入20个1-10之间的数。
输出:
对于每组输入,请输出1-10中的众数。
样例输入:
5 1 5 10 3 5 3 4 8 6 8 3 6 5 10 7 10 2 6 2
样例输出:
5
[解决办法]
有个方法为O(n)的做法
[解决办法]
引用:
C/C++ code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354#include<iostream>#include<cstdio>#include<algorithm>using namespace std;stru……


遍历一遍就能得到结果,这不是被王道压中的今年计算机考研的题嘛
[解决办法]


题目,下面是解法
九度OJ第1057程序RE.多谢
[解决办法]
九度OJ第1057程序RE.多谢
[解决办法]
引用:
引用:引用:引用:C/C++ code?123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354#include<i……

众数和出现次数大于一半这两个问题完全不是一回事。前者要难。

具体来说,众数问题只允许比较的时候,和排序一样有nlogn的下限(因为判定一个数组的元素是否两两不等这个问题用代数决策树可以证明nlogn的下限,众数问题+O(n)的后续处理就能解决两两不等问题,因此众数肯定nlogn下限)。所以众数问题基于比较的线性做法不存在。
[解决办法]
题目:
题目描述:
输入20个数,每个数都在1-10之间,求1-10中的众数(众数就是出现次数最多的数,如果存在一样多次数的众数,则输出权值较小的那一个)。
输入:
测试数据有多组,每组输入20个1-10之间的数。
输出:
对于每组输入,请输出1-10中的众数。
样例输入:
5 1 5 10 3 5 3 4 8 6 8 3 6 5 10 7 10 2 6 2
样例输出:
5
----------------
不就是做个数组保存频数吗?扫描一次就行了
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
fstream cin("test.txt");
int cnt[10] = {0};
int maxCnt = 0, num = 0;
int curNum;
while (cin >> curNum) {
cnt[curNum-1]++;
if (cnt[curNum-1]>maxCnt) {
maxCnt = cnt[curNum-1];
num = curNum;
}
}
cout << num << endl;
return 0;
}

[解决办法]
O(N)桶排序,输出计数总数最大的值(N是数据个数)
如果是1-10之间的浮点数,用基数排序O(k*N)
(k是数据中有效二进制位最多的,N是数据个数)

读书人网 >软件架构设计

热点推荐