您的位置:首页 > 其它

CCF 第7次认证

2016-04-30 11:15 197 查看
由于没有正式试题测试,我只能靠自己回想写下代码

转折点

import java.util.Scanner;

/**
* 求转折点个数 本题100分
*
* @author wwhhff11
*
*/
public class Main {

public static boolean check(int a, int b) {
return a > 0 && b < 0 || a < 0 && b > 0;
}

public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while (cin.hasNext()) {
int n = cin.nextInt();
int val[] = new int
;
for (int i = 0; i < n; i++) {
val[i] = cin.nextInt();
}
int ans = 0;
for (int i = 1; i < n - 1; i++) {
if (check(val[i] - val[i - 1], val[i + 1] - val[i])) {
ans++;
}
}
System.out.println(ans);
}
}
}


俄罗斯方块

import java.util.Scanner;

//输入格式类似下面这种:
//15*10方块空间
//0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0
//0 0 0 0 0 0 0 0 0 0
//0 0 0 1 0 0 0 1 0 0
//0 0 1 0 1 0 0 0 1 0
//0 0 0 0 1 1 0 0 1 0
//0 0 0 0
//1 1 0 0
//1 1 0 0
//0 0 0 0
//6
//第1~15行是输入的原图案,1代表有方块0代表没有。第16~19行是新出来的图形,
//即要下落的图形,最后一个整数代表新出来的图形在第几列开始下落。
//上面为1,则代表新给出的4*4矩阵的最左边一列是和原图案第1列对齐的,即下标为0的列。
//输入格式限定原图案前四行都为0。下落规则:若碰到为1的方块则停止下落,或者到达原图案底部。
//要求输出最后下落完成之后的图案。
/**
* 俄罗斯方块 本题100分
*
* @author wwhhff11
*
*/
public class Main {

public static int MAXN = 15;
public static int MAXM = 10;
public static int MAXN2 = 4;
public static int MAXM2 = 4;

public static int calcStep(int x, int y, int map[][], int n, int m) {
int step = 0;
while (x < n && y < m && map[x][y] == 0) {
x++;
step++;
}
return step;
}

public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while (cin.hasNext()) {
int map[][] = new int[MAXN][MAXM];
int target[][] = new int[MAXN2][MAXM2];
for (int i = 0; i < MAXN; i++) {
for (int j = 0; j < MAXM; j++) {
map[i][j] = cin.nextInt();
}
}
for (int i = 0; i < MAXN2; i++) {
for (int j = 0; j < MAXM2; j++) {
target[i][j] = cin.nextInt();
}
}
int start = cin.nextInt();
int step = Integer.MAX_VALUE;
for (int i = 0; i < MAXN2; i++) {
for (int j = 0; j < MAXM2; j++) {
if (target[i][j] == 1) {
step = Math.min(step,
calcStep(i, j + start - 1, map, MAXN, MAXM));
}
}
}
for (int i = 0; i < MAXN2; i++) {
for (int j = 0; j < MAXM2; j++) {
if (target[i][j] == 1) {
map[i + step - 1][j + start - 1] = 1;
}
}
}
for (int i = 0; i < MAXN; i++) {
for (int j = 0; j < MAXM; j++) {
if (j == 0) {
System.out.print(map[i][j]);
} else {
System.out.print(" " + map[i][j]);
}
}
System.out.println();
}
}
}
}


绝对路径和相对路径

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
* 根据当前路径,将相对路径转化为绝对路径 本题90分
*
* @author wwhhff11
*
*/
public class Main {

public static List<String> spiltPath(String path) {
String terms[] = path.split("/");
List<String> paths = new ArrayList<String>();
for (int i = 0, n = terms.length; i < n; i++) {
String s = terms[i].trim();
if ("".equals(s) == false && s.length() > 0) {
System.out.println(s);
paths.add(s);
}
}
return paths;
}

public static String joinPath(List<String> paths) {
while (true) {
int flag = 0;
for (int i = 0, n = paths.size(); i < n; i++) {
String term = paths.get(i);
if (".".equals(term) == true) {
// 当前目录
paths.remove(i);
flag = 1;
break;
} else if ("..".equals(term) == true) {
// 上一级目录
paths.remove(i);
paths.remove(i - 1);
flag = 1;
break;
}
}
if (flag == 0) {
break;
}
}
StringBuilder sb = new StringBuilder();
for (String path : paths) {
sb.append("/").append(path);
}
return sb.toString();
}

public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while (cin.hasNext()) {
int n = cin.nextInt();
String curpath = cin.next();
for (int i = 0; i < n - 1; i++) {
String path = cin.next();
if (path.startsWith(".") == true) {
// 相对路径
path = curpath + "/" + path;
}
path = joinPath(spiltPath(path));
System.out.println(path);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: