大家来研究下这个题目,如何实现最好.
从思路到具体代码实现.应该实现什么样的步骤,大家积极参与,互相交流吧,呵呵.
sc[]={0,...,0};
mc=0;
ms=[-1,...,-1];
for(i=0;i<n;i++){
sc[A[i]]++;
if(sc[A[i]]>mc){
mc=sc[A[i]];
msp=0;
ms[msp] = A[i];
}else if(sc[A[i]]==mc){
msp++;
ms[msp] = A[i];
}
}
for(i=0;i<=msp;i++){
print(ms[msp]);
}
这样的话,循环一次就够了,也不用排序。
On 12月7日, 下午2时42分, "汪军" <hydi...@gmail.com> wrote:
> 大家来研究下这个题目,如何实现最好.
> 从思路到具体代码实现.应该实现什么样的步骤,大家积极参与,互相交流吧,呵呵.
var msg = "";
var scores = new Array(50);
// 初始化成绩
for(var i=0; i<scores.length; i++)
scores[i] = parseInt(Math.random() * 100);
maxCountScores(scores, output);
msg = scores.toString() + "\n" + msg;
WScript.Echo(msg);
/*
参数:
scores 成绩数组
fnOutput 输出函数
*/
function maxCountScores(scores, fnOutput){
var scoreCount = new Array(); //
各种成绩的计数数组。在C中需要初始化
var maxCount = 0; // 计数的最大值
var maxScores = new Array(); // 计数最大的成绩数组
var offset = -1; //
技术最大的成绩的个数-1,即maxScores的使用空间的最大下标
// 没有检查参数的合法性
var n = scores.length;
for(var i=0;i<n;i++){
/*
在C中不需要if块,可直接写
scoreCount[scores[i]]++;
*/
if(scoreCount[scores[i]])
scoreCount[scores[i]]++;
else
scoreCount[scores[i]] = 1;
/*
如果当前分数的计数值大于"计数的最大值",则置"计数的最大值"为当前计数值,并且将offset复位
如果当前分数的计数值等于"计数的最大值",则将offset后移
*/
if(scoreCount[scores[i]]>maxCount){
maxCount = scoreCount[scores[i]];
maxScores[offset=0] = scores[i];
}else if(scoreCount[scores[i]]==maxCount){
maxScores[++offset] = scores[i];
}
}
// 输出结果
output(maxCount);
for(var i=0; i<=offset; i++){
output(maxScores[i]);
}
}
function output(d){
msg += ("\n" + d.toString());
}
On 12月8日, 下午8时58分, "xue hang" <xuerolla...@gmail.com>
wrote:
> 能不能加上注释,或是可执行的源代码 mady?
> 无上感激。
>
> 在06-12-8,mady <mady...@hotmail.com> 写道:
K.I.S.S~~