• CCF201312--模拟练习试题参考答案(Java)


    来源:CCF计算机职业资格网站


    问题参见:CCF201312赛题


    为了帮助大家熟悉 CCF 软件能力认证考试的操作方式与答题环境,了解试题的大致难度,做好考前的准备,故在此提供试题的参考答案。Java 程序是灵活的,为了解决同一个问题,即使结果相同,程序的内容也不一定是完全一致的,仅供各位在练习时参考。

    1. 出现次数最多的数

    import java.util.*;
    
    public class Main {
    	public static void main(String[] args) {
    		new Main().run();
    	}
    
    	public void run() {
    		Scanner fin = new Scanner(System.in);
    		int N = fin.nextInt();
    		int[] count = new int[10001];
    		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) {
    				maxCount = count[i];
    				result = i;
    			}
    		}
    		System.out.println(result);
    	}
    }

    2. ISBN 号码

    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    
    public class Main {
    	public static void main(String args[]) {
    		BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));
    		try{
    			int sum=0;char cc='0';
    			String isbn_0 = bin.readLine();
    			String isbn = isbn_0.replace("-", "");
    
    			for(int i=0; i<9; i++){
    				int ii = (int)isbn.charAt(i)-48;
    				sum += ii * (i+1);
    			}
    
    			sum = sum % 11;
    			if(sum == 10) cc = 'X';//
    			else cc = (char)(sum+48);
    			if(cc == isbn.charAt(9)) System.out.println("Right");
    			else{
    				isbn_0 = isbn_0.substring(0,12) + cc;
    				System.out.println(isbn_0);
    			}
    		}catch(Exception e){
    			e.printStackTrace();
    		}
    	}
    }

    3.最大的矩形

    import java.util.*;
    
    public class Main {
    	public static void main(String[] args) {
    		new Main().run();
    	}
    	
    	public void run() {
    		Scanner fin = new Scanner(System.in);int N = fin.nextInt();
    		int[] height = new int[N];
    		for (int i = 0; i < N; ++i) height[i] = fin.nextInt();
    		
    		int result = 0;
    		for (int i = 0; i < N; ++i) {
    			int width = 1;
    			for (int j = i - 1; j >= 0; --j) {
    				if (height[j] < height[i]) break;
    				++width;
    			}
    			for (int j = i + 1; j < N; ++j) {
    				if (height[j] < height[i]) break;
    				++width;
    			}
    			int area = width * height[i];
    			result = Math.max(result, area);
    		}
    
    		System.out.println(result);
    	}
    }

    4.有趣的数

    import java.util.*;
    
    public class Main {
    	public static void main(String[] args) {
    		new Main().run();
    	}
    	
    	public void run() {
    		Scanner fin = new Scanner(System.in);
    		int N = fin.nextInt();
    		long[] count = new long[8];
    		count[6] = 0;
    		count[7] = 1;
    		long mod = 1000000007;for (int i = 2; i <= N; ++i) {
    			long[] newCount = new long[8];
    			newCount[0] = (count[0] * 2 + count[1] + count[3]) % mod;
    			newCount[1] = (count[1] * 2 + count[2] + count[5]) % mod;
    			newCount[2] = (count[2] + count[6]) % mod;
    			newCount[3] = (count[3] * 2 + count[4] + count[5]) % mod;
    			newCount[4] = (count[4] + count[7]) % mod;
    			newCount[5] = (count[5] * 2 + count[6] + count[7]) % mod;
    			newCount[6] = 0;
    			newCount[7] = 1;
    			count = newCount;
    		}
    
    		System.out.println(count[0]);
    	}
    }

    5.I’m stuck!

    import java.util.*;
    
    public class Main {
    	public static void main(String[] args) {
    		new Main().run();
    	}
    	
    	public void run() {
    		Scanner fin = new Scanner(System.in);
    		int N = fin.nextInt();
    		long[] count = new long[8];
    		count[6] = 0;
    		count[7] = 1;
    		long mod = 1000000007;for (int i = 2; i <= N; ++i) {
    			long[] newCount = new long[8];
    			newCount[0] = (count[0] * 2 + count[1] + count[3]) % mod;
    			newCount[1] = (count[1] * 2 + count[2] + count[5]) % mod;
    			newCount[2] = (count[2] + count[6]) % mod;
    			newCount[3] = (count[3] * 2 + count[4] + count[5]) % mod;
    			newCount[4] = (count[4] + count[7]) % mod;
    			newCount[5] = (count[5] * 2 + count[6] + count[7]) % mod;
    			newCount[6] = 0;
    			newCount[7] = 1;
    			count = newCount;
    		}
    
    		System.out.println(count[0]);
    	}
    }
    
    5.I’m stuck!
    import java.util.*;
    
    public class Main {
    	public static void main(String[] args) {
    	new Main().run();
    }
    
    public void run() {
    	Scanner fin = new Scanner(System.in);
    	int R = fin.nextInt();
    	int C = fin.nextInt();
    	fin.nextLine();
    	int[][] board = new int[R + 2][C + 2];
    	int rowStart = 0, colStart = 0, rowEnd = 0, colEnd = 0;
    	for (int i = 1; i <= R; ++i) {
    		String line = fin.nextLine();
    		for (int j = 1; j <= C; ++j) {
    			char c = line.charAt(j - 1);
    			switch (c) {case '#': break;
    				case '-': board[i][j] = 5; break;
    				case '|': board[i][j] = 0xA; break;
    				case '+':
    				case 'S':
    				case 'T':
    					board[i][j] = 0xF; break;
    				case '.': board[i][j] = 0x8; break;
    				default: break;
    			}
    			if (c == 'S') {
    				rowStart = i;
    				colStart = j;
    			} else if (c == 'T') {
    				rowEnd = i;
    				colEnd = j;
    			}
    		}
    	}
    		
    	int[] dr = new int[] {0, -1, 0, 1};
    	int[] dc = new int[] {1, 0, -1, 0};
    	// Scan 1: find all cells which can reach T
    	boolean[][] visited = new boolean[R + 2][C + 2];
    	boolean[][] canReachT = new boolean[R + 2][C + 2];
    	initVisited(visited);
    	canReachT[rowEnd][colEnd] = true;
    	visited[rowEnd][colEnd] = true;
    	Queue<Integer> queue = new LinkedList<Integer>();
    	queue.add(rowEnd);
    	queue.add(colEnd);
    	while (!queue.isEmpty()) {
    		int r = queue.remove();
    		int c = queue.remove();
    		for (int i = 0; i < 4; ++i) {
    			int nr = r + dr[i];int nc = c + dc[i];
    			if (visited[nr][nc]) continue;
    			if ((board[nr][nc] & (1 << ((i + 2) % 4))) != 0) {
    				canReachT[nr][nc] = true;
    				queue.add(nr);
    				queue.add(nc);
    				visited[nr][nc] = true;
    			}
    		}
    	}
    	/*
    	for (int i = 1; i <= R; ++i) {
    		for (int j = 1; j <= C; ++j) {
    			if (canReachT[i][j]) {
    				System.out.println("i = " + i + ", j = " + j);
    			}
    		}
    	}
    	*/
    	if (!canReachT[rowStart][colStart]) {
    		System.out.println("I'm stuck!");
    		return;
    	}
    	// Scan 2: get result
    	boolean[][] rCanReach = new boolean[R + 2][C + 2];
    	initVisited(visited);
    	queue.clear();
    	visited[rowStart][colStart] = true;
    	rCanReach[rowStart][colStart] = true;
    	queue.add(rowStart);
    	queue.add(colStart);
    	while (!queue.isEmpty()) {
    		int r = queue.remove();
    		int c = queue.remove();
    		for (int i = 0; i < 4; ++i) {
    			if ((board[r][c] & (1 << i)) == 0) continue;int nr = r + dr[i];
    			int nc = c + dc[i];
    			if (visited[nr][nc]) continue;
    			if (board[nr][nc] == 0) continue;
    			rCanReach[nr][nc] = true;
    			queue.add(nr);
    			queue.add(nc);
    			visited[nr][nc] = true;
    		}
    	}
    	int result = 0;
    	for (int i = 1; i <= R; ++i) {
    		for (int j = 1; j <= C; ++j) {
    			/*
    			if (rCanReach[i][j]) {
    				System.out.println("i = " + i + ", j = " + j);
    			}
    			*/
    			if (rCanReach[i][j] && (!canReachT[i][j])) ++result;
    		}
    	}
    	System.out.println(result);
    }
    
    private void initVisited(boolean[][] visited) {
    	int R = visited.length - 2;
    	int C = visited[0].length - 2;
    	for (int i = 0; i <= R + 1; ++i) {
    		visited[i][0] = true;
    		visited[i][C + 1] = true;
    	}
    
    	for (int j = 0; j <= C + 1; ++j) {
    		visited[0][j] = true;
    		visited[R + 1][j] = true;
    	}
    
    	for (int i = 1; i <= R; ++i) {
    		for (int j = 1; j <= C; ++j) {
    			visited[i][j] = false;}
    		}
    	}
    }





  • 相关阅读:
    松软科技web课堂:SQLServer之UCASE() 函数
    松软科技web课堂:SQLServer之HAVING 子句
    SQLServer之GROUP BY语句
    松软科技web课堂:SQLServer之SUM() 函数
    松软科技web课堂:SQLServer之MIN() 函数
    SQLServer之MAX() 函数
    松软科技web课堂:SQLServer之LAST() 函数
    松软科技带你学开发:SQL--FIRST() 函数
    松软科技带你学开发:SQL--COUNT() 函数
    NodeJS初介
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7564250.html
Copyright © 2020-2023  润新知