前几天知道的CCF计算机职业资格认证考试,觉得好像比软考含金量高一些,就去了解了一下,做了模拟试题中的 “出现次数最多的数” 这道题,我的算法和官方答案算法不同,个人觉得觉得官方的好一点,没那么繁琐,就是可能第一眼看过去觉得有些难理解,我会在下面做一个官方答案的解析,最后也会放上自己的代码。

做模拟试题要先登录官网:https://passport.ccf.org.cn/sso/platform,CSP认证 报名考试→模拟考试(建议用电脑打开,手机看不到模拟考试)

模拟试题的答案可以直接在官网下载

题目如下:

问题描述
  给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
输入格式
  输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数。
  输入的第二行有n个整数s1, s2, …, sn (1 ≤ si ≤ 10000, 1 ≤ i ≤ n)。相邻的数用空格分隔。
输出格式
  输出这n个次数中出现次数最多的数。如果这样的数有多个,输出其中最小的一个。
样例输入
6
10 1 10 20 30 20
样例输出
10

官方正确代码及解析:

 import java.util.*;
public class Main {
public static void main(String[] args) {
new Main().run(); //调用Main类中的run()函数
}
public void run() {
Scanner fin = new Scanner(System.in);
int N = fin.nextInt();
int[] count = new int[10001]; //创建一个长度为10001的数组count
for (int i = 0; i < N; ++i)
{
++count[fin.nextInt()]; //设置一个循环,将我们输入的整数作为数组的下标,对该下标数的元素里的数加一
}
int maxCount = -1; //设置一个记录次数的标识符
int result = 0; //设置一个记录当前出现最多次的数的标识符
for (int i = 1; i <= 10000; ++i)
{
if (count[i] > maxCount) //遍历count数组,如果当前元素记录次数大于maxCount,就将当前元素记录的次数以及下标存在maxCount和result里
{
maxCount = count[i];
result = i;
}
}
System.out.println(result); //最后输出出现最多的数
}
}

10-13行这段代码用输入的数作为count数组元素的下标,每输入一个数,就将以该数为下标的count数组元素里的数加一,而java中int数组类型的默认值为0,举一个例子:

现在n=5,要输入的整数分别为12,34,2,12,4。则系统的操作为:++count[12],++count[34],++count[2],,++count[12],,++count[4],

所以count[12]=2,count[34]=1,count[2]=1,count[4]=1,而没有输入的数则是:count[45]=0,count[265]=0,count[8]=0……

最后只用遍历一遍count数组就可以比较出出现最多次数的数,而且,遍历是从小向大遍历,当两个数出现次数一样时,不会采取任何操作,标识数里存的还是小的数。

下面是我自己的正确代码:

 import java.util.Scanner;
public class Main { public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int s[]=new int[n+1];
for(int i=1;i<=n;i++)
{
s[i]=sc.nextInt();
}
int temp=0;
int mesure=1;
int max=s[1];
int sum=0;
for(int i=1;i<=n;i++)
{
temp=s[i];
for(int j=i+1;j<=n;j++)
{
if(s[j]==temp)
mesure++;
}
if(mesure>sum)
{
max=s[i];
sum=mesure;
}
else if(mesure==sum)
{
if(max>s[i])
max=s[i];
}
mesure=1;
}
System.out.println(max);
}
}

我直接将输入的数按顺序存在了数组里,再用的双重循环,判断出出现次数最多的数,开始只有90分,后来发现问题后调通拿了100分。

我后面会继续做ccf的模拟试题,也会在后面的博客里写出。

CCF 模拟试题——出现次数最多的数 官方答案解析及自己写的正确答案的更多相关文章

  1. CCF系列之出现次数最多的数(201312-1)

    试题名称: 出现次数最多的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定n个正整数,找出它们中出现次数最多的数.如果这样的数有多个,请输出其中最小的一个.   输入格 ...

  2. CCF CSP 201312-1 出现次数最多的数

    题目链接:http://118.190.20.162/view.page?gpid=T5 问题描述 试题编号: 201312-1 试题名称: 出现次数最多的数 时间限制: 1.0s 内存限制: 256 ...

  3. CCF 出现次数最多的数 201312-1

    出现次数最多的数 问题描述 试题编号: 201312-1 试题名称: 出现次数最多的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定n个正整数,找出它们中出现次数最多的 ...

  4. CCF真题之出现次数最多的数

    201312-1 问题描述 给定n个正整数,找出它们中出现次数最多的数.如果这样的数有多个,请输出其中最小的一个. 输入格式 输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数. ...

  5. CCF 201312-1 出现次数最多的数 (水题)

    问题描述 给定n个正整数,找出它们中出现次数最多的数.如果这样的数有多个,请输出其中最小的一个. 输入格式 输入的第一行只有一个正整数n(1 ≤ n ≤ 1000),表示数字的个数. 输入的第二行有n ...

  6. CCF-出现次数最多的数

    试题名称: 出现次数最多的数 试题编号:201312-1 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给定n个正整数,找出它们中出现次数最多的数.如果这样的数有多个,请输出其中最小的一 ...

  7. CCF-201312-1-出现次数最多的数

    问题描述 试题编号: 201312-1 试题名称: 出现次数最多的数 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 给定n个正整数,找出它们中出现次数最多的数.如果这样的数有 ...

  8. CSP201312-1:出现次数最多的数

    引言:CSP(http://www.cspro.org/lead/application/ccf/login.jsp)是由中国计算机学会(CCF)发起的“计算机职业资格认证”考试,针对计算机软件开发. ...

  9. 【面试被虐】如何只用2GB内存从20亿,40亿,80亿个整数中找到出现次数最多的数?

    这几天小秋去面试了,不过最近小秋学习了不少和位算法相关文章,例如 [面试现场]如何判断一个数是否在40亿个整数中? [算法技巧]位运算装逼指南 对于算法题还是有点信心的,,,,于是,发现了如下对话. ...

随机推荐

  1. kubernetes API服务器的安全防护

    12.1.了解认证机制 启动API服务器时,通过命令行选项可以开启认证插件. 12.1.1.用户和组 了解用户: 分为两种连接到api服务器的客户端: 1.真实的人 2.pod,使用一种称为Servi ...

  2. 深入理解 linux磁盘顺序写、随机写

    一.前言 ● 随机写会导致磁头不停地换道,造成效率的极大降低:顺序写磁头几乎不用换道,或者换道的时间很短 ● 本文来讨论一下两者具体的差别以及相应的内核调用 二.环境准备 组件 版本 OS Ubunt ...

  3. final,权限,引用类型数据

    1. final关键字 1.概述 为了避免子类出现随意改写父类的情况,java提供了关键字final,用于修饰不可改变内容 final:不可改变,可以修饰类,方法和变量 类:被修饰的类,不能用于继承 ...

  4. 三角函数与JavaScript

     1. 三角函数 sin&(求对边与斜边的比值) cos&(邻边与斜边的比值) tan&(对边与邻边的比值) 2.JavaScript的函数的使用 Math.sin() Mat ...

  5. .net测试篇之测试神器Autofixture基本配置一

    系列目录 实际工作中我们需要的数据逻辑万千,千变万化,而AutoFixture默认是按照一定算法随机生成一些假数据,虽然这在多数时候是ok的,但是可能不能满足我们的所有业务场景,有些时候我们需要进行一 ...

  6. 登录cookies

    cookie Cookie 是指某些网站服务器为了辨别用户身份和进行Session跟踪,而储存在用户浏览器上的文本文件,Cookie可以保持登录信息到用户下次与服务器的会话./p> cookie ...

  7. Maven项目添加ojdbc8

    1.找到Oracle中的ojdbc8,它的位置在Oracle客户端 2.找到它的位置后,把你放ojdbc8的位置复制,改如下代码"D:\ojdbc8.jar"为你的ojdbc8位置 ...

  8. 面试中常用的六种排序算法及其Java实现

    常见排序算法的时间复杂度以及稳定性: 1 public class Sort { public static void main(String[] args){ int[] nums=new int[ ...

  9. python学习——面向对象编程

    关于python面向对象编程,请参考: https://blog.csdn.net/zhoudaxia/article/details/23341261

  10. Java多线程之线程的暂停

    Java多线程之线程的暂停 下面该稍微休息一下了呢……不过,这里说的是线程休息,不是我们哦.本节将介绍一下让线程暂停运行的方法. 线程Thread 类中的sleep 方法能够暂停线程运行,Sleep ...