CCF201312--模拟练习试题参考答案(Java)
2017-01-15 15:02
363 查看
来源:CCF计算机职业资格网站。
问题参见:CCF201312赛题。
为了帮助大家熟悉 CCF 软件能力认证考试的操作方式与答题环境,了解试题的大致难度,做好考前的准备,故在此提供试题的参考答案。Java 程序是灵活的,为了解决同一个问题,即使结果相同,程序的内容也不一定是完全一致的,仅供各位在练习时参考。
1. 出现次数最多的数
2. ISBN 号码
3.最大的矩形
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;}
}
}
}
问题参见: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 ; 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;}
}
}
}
相关文章推荐
- CCF201312--模拟练习试题参考答案(C++)
- CCF计算机软件能力认证试题练习-数位之和(Java参考答案学习记录)
- CCF计算机软件能力认证试题练习-日期计算(Java参考答案学习记录)
- CCF计算机软件能力认证模拟试题-ISBN号码(Java参考答案学习记录)
- CCF计算机软件能力认证模拟试题-出现次数最多的数(Java参考答案学习记录)
- CCF计算机软件能力认证试题练习-相反数(Java参考答案学习记录)
- CCF计算机软件能力认证模拟试题-出现次数最多的数(Java参考答案学习记录)
- CCF计算机软件能力认证试题练习-折点计算(Java参考答案学习记录)
- CCF计算机软件能力认证试题练习-数列分段(Java参考答案学习记录)
- CCF计算机软件能力认证模拟试题参考答案(JAVA)(201703 1+2)
- CCF计算机软件能力认证试题练习-相邻数对(Java参考答案学习记录)
- CCF计算机软件能力认证试题练习-图像旋转(Java参考答案学习记录)
- CCF计算机软件能力认证模拟试题-最大的矩形(Java参考答案学习记录)
- CCF计算机软件能力认证试题练习-门禁系统(Java参考答案学习记录)
- 最新公务员考试申论模拟试题20套(含参考答案).doc
- 2011年全国软件大赛模拟题及参考答案(Java高职组)
- 第六届蓝桥杯省赛(java)C组试题及参考答案
- 2011年全国软件大赛模拟题及参考答案(Java本科组)
- 第五届蓝桥杯练习系统往届试题公式求解试题及参考答案---田野上的稻草人
- 2012_预赛_java_本科试题“奇怪的比赛”参考答案---田野上的稻草人