CCF认证经验
Posted LeewinPlus
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CCF认证经验相关的知识,希望对你有一定的参考价值。
思维步骤:
一、根据题目要求,分析程序输入、输出的格式和关系
二、分析题目给的输入输出样例或自己写一个样例,用自己的思维来思考如何处理这个问题才能得到这样的输入(此过程先不考虑程序代码如何实现,只想着怎样的思路才能解决问题即可)
分析时:题目中对算法要求或描述基本上就是算法的核心,循环或自动的执行算法要求就是解题的算法
三、将思维程序化
- 思考输入的数据如何存储(以方便程序中使用这些数据为目的)
- 算法核心处一般都为if...else、for等结构的综合使用(将之前自己处理这个问题的思维用代码来代替,即找出需要循环执行的、满足不同的条件有不同的执行等这样类似的模块,用相应的程序结构来实现)
- 边界值、临特殊值等单独分析
四、遇到bug,将样例代入程序中,找出不到位的地方,一般都是临界值的问题
五、反复的将样例与程序进行对照,将程序完善
六、检查命名、格式等问题,比如主类名要求命名为Main(很多认证考试都有这样的要求),输出中是否可用换行、空格等。
下面通过例题为分析:
2015年12月 CCF认证第二题
描述:输入一个m行n列的矩阵,要求将横向和纵向3个或3个以上连续相等和数据置0
样例:
输入:
4 5
2 2 2 3 3
2 3 2 2 2
2 5 2 3 3
4 6 6 6 3
输出:
0 0 0 3 3
0 3 0 0 0
0 5 0 3 3
4 0 0 0 3
程序代码:
import java.util.Scanner;
public class Main
public static void main(String[] args)
Scanner scan = new Scanner(System.in);
int m = scan.nextInt();
int n = scan.nextInt();
int mark = 1;
int ArrayIn1[][] = new int[m][n];
int ArrayIn2[][] = new int[m][n];
int ArrayOut[][] = new int[m][n];
for(int i = 0; i < m; i ++)
for(int j = 0; j < n ; j ++)
ArrayIn1[i][j] = scan.nextInt();
ArrayIn2[i][j] = ArrayIn1[i][j];
for(int i = 0; i < m; i ++)
for(int j = 1; j < n ; j ++)
if(ArrayIn1[i][j] == ArrayIn1[i][j-1])
mark ++;
else
if(mark >= 3)
for(int k = j-mark; k < j; k ++)
ArrayIn1[i][k] = 0;
mark = 1;
if(j == n - 1)
if(mark >= 3) for(int k = j-mark+1; k < n; k ++)
ArrayIn1[i][k] = 0;
mark = 1;
for(int i = 0; i < n; i ++)
for(int j = 1; j < m ; j ++)
if(ArrayIn2[j][i] == ArrayIn2[j-1][i])
mark ++;
else
if(mark >= 3)
for(int k = j-mark; k < j; k ++)
ArrayIn2[k][i] = 0;
mark = 1;
if(j == m - 1)
if(mark >= 3) for(int k = j-mark+1; k < m; k ++)
ArrayIn2[k][i] = 0;
mark = 1;
for(int i = 0; i < m; i ++)
for(int j = 0; j < n ; j ++)
if(ArrayIn1[i][j] == ArrayIn2[i][j])
ArrayOut[i][j] = ArrayIn1[i][j];
else
ArrayOut[i][j] = 0;
for(int i = 0; i < m; i ++)
for(int j = 0; j < n ; j ++)
System.out.print(ArrayOut[i][j]+" ");
System.out.println();
以上是关于CCF认证经验的主要内容,如果未能解决你的问题,请参考以下文章