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;}
		}
	}
}





原文地址:https://www.cnblogs.com/tigerisland/p/7564250.html