文章目录
-
-
- CCF CSP简介
- 试题编号:201312-1_出现次数最多的数
- 试题编号:201403-1_相反数
- 试题编号:201409-1_相邻数对
- 试题编号:201412-1_门禁系统
- 试题编号:201503-1_图像旋转
- 试题编号:201509-1_数列分段
- 试题编号:201512-1_数位之和
- 试题编号:201604-1_折点计数
- 试题编号201609-1_最大波动
- 试题编号:201612-1_中间数
- 试题编号:201703-1_分蛋糕
- 试题编号:201709-1_打酱油
- 试题编号:201712-1_最小差值
- 试题编号:201803-1_跳一跳
- 试题编号:201809-1_卖菜
- 试题编号:201812-1_小明上学
- 试题编号:201903-1_小中大
- 试题编号:201909-1_小明种苹果
-
前天报名了CCF CSP认证考试,用了两天时间,好不容易把官网提供的历次考试真题做完了。CSP认证考试一共5道题目,难度依次递增,考试时长4小时。做完了最简单的第1题之后发现,确实比计算机二级考试水准要高得多。总结如下:
CCF CSP简介
以下关于CCF的介绍来自官网CCF计算机职业资格认证
CCF计算机软件能力认证 Certified Software Professional)是中国计算机学会(CCF)联合华为、360、滴滴等十余家知名IT企业以及清华、北航、国防科大等15所著名高校于2014年推出CCF CSP(计算机软件能力)认证标准,用于评价业界人士的计算机软件能力。目前,CCF已成功举办17次CSP认证,来自全国400余所单位的109819人参加了认证。
试题编号:201312-1_出现次数最多的数
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
给定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.Scanner;
public class 出现次数最多的数 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int ans = 0;
int temp = 0;
int count[] = new int[n];
int arr[] = new int[10001]; // arr是统计各个数个数的数组,x出现一次,则arr[x]++
for (int i = 0; i < n; i++) {
count[i] = sc.nextInt();
arr[count[i]]++;
}
for (int i = 1; i <= 10000; i++) {
if (arr[i] > temp) {
ans = i; //如果arr[i]>temp,则将次数最多的数为i;遍历整个数组,i变化的同时,不断刷新temp和ans的值
temp = arr[i];
}
}
System.out.println(ans);
}
}
试题编号:201403-1_相反数
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
有 N 个非零且各不相同的整数。请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对相反数)。
输入格式
第一行包含一个正整数 N。(1 ≤ N ≤ 500)。
第二行为 N 个用单个空格隔开的非零整数,每个数的绝对值不超过1000,保证这些整数各不相同。
输出格式
只输出一个整数,即这 N 个数中包含多少对相反数。
样例输入
5
1 2 3 -1 -2
样例输出
2
import java.util.Scanner;
public class 相反数 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int count[] = new int[n];
int flag = 0;
for (int i = 0; i < n; i++) {
count[i] = sc.nextInt();
}
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (count[i] + count[j] == 0)
flag++;
/*和冒泡排序法一样,用count中的每一个元素和其余n-1个元素去求和,如果和为0,说明是一对相反数,flag加1*/
}
}
System.out.println(flag);
}
}
试题编号:201409-1_相邻数对
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
给定n个不同的整数,问这些数中有多少对整数,它们的值正好相差1。
输入格式
输入的第一行包含一个整数n,表示给定整数的个数。
第二行包含所给定的n个整数。
输出格式
输出一个整数,表示值正好相差1的数对的个数。
样例输入
6
10 2 6 3 7 8
样例输出
3
样例说明
值正好相差1的数对包括(2, 3), (6, 7), (7, 8)。
评测用例规模与约定
1<=n<=1000,给定的整数为不超过10000的非负整数。
import java.util.Scanner;
public class 相邻数对 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int flag = 0;
int count[] = new int[n];
for (int i = 0; i < n; i++) {
count[i] = sc.nextInt();
}
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (Math.abs(count[i] - count[j]) == 1)
flag++;
/*和冒泡排序法一样,用count中的每一个元素和其余n-1个元素去做差,如果差的绝对值为1,说明是一个相邻数对,flag加1*/
}
}
System.out.println(flag);
}
}
试题编号:201412-1_门禁系统
时间限制: 1.0s
内存限制: 256.0MB
问题描述:
问题描述
涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。每位读者有一个编号,每条记录用读者的编号来表示。给出读者的来访记录,请问每一条记录中的读者是第几次出现。
输入格式
输入的第一行包含一个整数n,表示涛涛的记录条数。
第二行包含n个整数,依次表示涛涛的记录中每位读者的编号。
输出格式
输出一行,包含n个整数,由空格分隔,依次表示每条记录中的读者编号是第几次出现。
样例输入
5
1 2 1 1 3
样例输出
1 1 2 3 1
评测用例规模与约定
1≤n≤1,000,读者的编号为不超过n的正整数。
import java.util.Scanner;
public class 门禁系统 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int count[] = new int[n];
int times[] = new int[n];
for (int i = 0; i < n; i++) {
count[i] = sc.nextInt();
times[count[i]]++;
System.out.print(times[count[i]] + " ");
/*输入一个数,另一个数组相应位置加1,然后输出这个位置的数,也就是输入数据出现的次数*/
}
}
}
试题编号:201503-1_图像旋转
时间限制: 5.0s
内存限制: 256.0MB
问题描述:
问题描述
旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。
计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。
输入格式
输入的第一行包含两个整数n, m,分别表示图像矩阵的行数和列数。
接下来n行每行包含m个整数,表示输入的图像。
输出格式
输出m行,每行包含n个整数,表示原始矩阵逆时针旋转90度后的矩阵。
样例输入
2 3
1 5 3
3 2 4
样例输出
3 4
5 2
1 3
评测用例规模与约定
1 ≤ n, m ≤ 1,000,矩阵中的数都是不超过1000的非负整数。
import java.util.Scanner;
public class 图像旋转 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int arr[][] = new int[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
arr[i][j] = sc.nextInt();
}
}
for (int i = m - 1; i >= 0; i--) {
for (int j = 0; j < n; j++) {
System.out