前言:以下代码仅供参考,若有错误欢迎指正哦~
1 题目一
一个串的子串是指该串的一个连续的局部。如果不要求连续,则可称为它的子序列。
比如对串:"abcdefg" 而言,"ab","abd","bdef"等都是它的子序列。
特别地,一个串本身,以及空串也是它的子序列。
对两个串而言,可以有许多的共同的子序列,我们关心的是:它们所共同拥有的长度最大的子序列是多长。以下代码实现了这个问题的求解。请填写划线部分缺失的代码。
注意:只填写缺少的代码,不要写任何多余的内容,比如注释或说明文字。public classZixulie
{public static intf(String x, String y)
{if(x.length()==0) return 0;if(y.length()==0) return 0;
String x1= x.substring(1);
String y1= y.substring(1);if(x.charAt(0)==y.charAt(0)) return f(x1,y1)+1;return__________________________;
}public static voidmain(String[] args)
{
System.out.println(f("ac","abcd")); //2
System.out.println(f("acebbcde1133","xya33bc11de")); //5
}
}
答案:Math.max(f(x, y1),f(x1, y))
2 题目二
历史上有许多计算圆周率pai的公式,其中,格雷戈里和莱布尼茨发现了下面的公式:
pai= 4*(1-1/3+1/5-1/7....)
参见【图1.png】
这个公式简单而优美,但美中不足,它收敛的太慢了。
如果我们四舍五入保留它的两位小数,那么:
累积1项是:4.00累积2项是:2.67累积3项是:3.47。。。
请你写出它累积100项是多少(四舍五入到小数后两位)。
注意:只填写该小数本身,不要填写任何多余的说明或解释文字。答案:3.13
1 public classMain {2
3 public static voidmain(String[] args) {4 double result = 0;5 for(int i = 1;i <= 100;i++) {6 double b = 2 * i - 1;7 if(i % 2 == 1) {8 result = result + 1 /b;9 } else{10 result = result - 1 /b;11 }12 }13 System.out.printf("%.2f", (4*result));14 }15
16 }
3 题目三
如果x的x次幂结果为10(参见【图1.png】),你能计算出x的近似值吗?
显然,这个值是介于2和3之间的一个数字。
请把x的值计算到小数后6位(四舍五入),并填写这个小数值。
注意:只填写一个小数,不要写任何多余的符号或说明。
答案:2.506184
1 public classMain {2
3 public static double min = 10;4
5 public static voidmain(String[] args) {6 double result = 0;7 for(double i = 2.5;i <= 2.6;i = i + 0.00000001) {8 double r = Math.abs(10 -Math.pow(i, i));9 if(min >r) {10 min =r;11 result =i;12 }13 }14 System.out.printf("%.6f", result);15 System.out.println("\n"+result);16 System.out.println(Math.pow(result, result));17 }18
19 }
4 题目四
今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行。
要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字。如下就是一个符合要求的排列:17126425374635当然,如果把它倒过来,也是符合要求的。
请你找出另一种符合要求的排列法,并且这个排列法是以74开头的。
注意:只填写这个14位的整数,不能填写任何多余的内容,比如说明注释等。
答案:74151643752362
1 public classMain {2
3 public void swap(int[] A, int i, intj) {4 int temp =A[i];5 A[i] =A[j];6 A[j] =temp;7 }8
9 public void dfs(int[] A, intstep) {10 if(step ==A.length) {11 StringBuffer s = new StringBuffer("");12 for(int i = 0;i < A.length;i++)13 s.append(A[i]);14 boolean judge = true;15 String s1 =s.toString();16 for(int i = 1;i <= 7;i++) {17 int a = s1.indexOf(i+"");18 int b = s1.lastIndexOf(""+i);19 if(b - a != i + 1) {20 judge = false;21 break;22 }23 }24 if(judge)25 System.out.println(s1);26 return;27 } else{28 for(int i = step;i < A.length;i++) {29 if(A[step] == 7 || A[step] == 4)30 dfs(A, step + 1);31 if(A[i] == 7 || A[i] == 4)32 continue;33 swap(A, i, step);34 dfs(A, step + 1);35 swap(A, i, step);36 }37 }38 }39
40 public static voidmain(String[] args) {41 Main test = newMain();42 int[] A = {7,4,1,1,2,2,4,3,7,3,5,5,6,6};43 test.dfs(A, 0);44 }45 }
5 题目五
勾股定理,西方称为毕达哥拉斯定理,它所对应的三角形现在称为:直角三角形。
已知直角三角形的斜边是某个整数,并且要求另外两条边也必须是整数。
求满足这个条件的不同直角三角形的个数。
【数据格式】
输入一个整数 n (0
要求输出一个整数,表示满足条件的直角三角形个数。
例如,输入:5程序应该输出:1再例如,输入:100程序应该输出:2再例如,输入:3程序应该输出:0资源约定:
峰值内存消耗(含虚拟机)<256M
CPU消耗<1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
1 importjava.util.Scanner;2
3 public classMain {4 public static longn;5 public static intresult;6
7 public voidgetResult() {8 for(long i = 1;i < n;i++) {9 for(long j = n - i + 1;j < n;j++) {10 long temp = i * i + j *j;11 if(temp == n * n && j >=i)12 result++;13 }14 }15 System.out.println(result);16 }17
18 public static voidmain(String[] args) {19 Main test = newMain();20 Scanner in = newScanner(System.in);21 n =in.nextLong();22 test.getResult();23 }24
25 }
6 题目六
你一定听说过“数独”游戏。
如【图1.png】,玩家需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个同色九宫内的数字均含1-9,不重复。
数独的答案都是唯一的,所以,多个解也称为无解。
本图的数字据说是芬兰数学家花了3个月的时间设计出来的较难的题目。但对会使用计算机编程的你来说,恐怕易如反掌了。
本题的要求就是输入数独题目,程序输出数独的唯一解。我们保证所有已知数据的格式都是合法的,并且题目有唯一的解。
格式要求,输入9行,每行9个字符,0代表未知,其它数字为已知。
输出9行,每行9个数字表示数独的解。
例如:
输入(即图中题目):005300000
800000020
070010500
400005300
010070006
003200080
060500009
004000030
000009700程序应该输出:145327698
839654127
672918543
496185372
218473956
753296481
367542819
984761235
521839764再例如,输入:800000000
003600000
070090200
050007000
000045700
000100030
001000068
008500010
090000400程序应该输出:812753649
943682175
675491283
154237896
369845721
287169534
521974368
438526917
796318452资源约定:
峰值内存消耗(含虚拟机)<256M
CPU消耗<2000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
1 importjava.util.Scanner;2
3 public classMain {4 public static int[][] group = new int[9][9];5 public static int[][] value = new int[9][9];6 public static int[][] row = new int[9][9];7 public static int[][] ring = new int[9][9];8 public static int[][] get_group = new int[9][9];9
10 public voidinit() {11 String[] S = new String[9];12 for(int i = 0;i < 3;i++) {13 S[i] = "000111222";14 S[3 + i] = "333444555";15 S[6 + i] = "666777888";16 }17 for(int i = 0;i < 9;i++)18 for(int j = 0;j < S[i].length();j++)19 group[i][j] = S[i].charAt(j) - '0';20 for(int i = 0;i < 9;i++)21 for(int j = 0;j < 9;j++) {22 row[i][j] = -1;23 ring[i][j] = -1;24 get_group[i][j] = -1;25 }26 }27
28 public void dfs(intstep) {29 if(step == 81) {30 for(int i = 0;i < 9;i++) {31 for(int j = 0;j < 9;j++)32 System.out.print(value[i][j]);33 System.out.println();34 }35 return;36 } else{37 int x = step / 9;38 int y = step % 9;39 if(value[x][y] > 0)40 dfs(step + 1);41 else{42 for(int i = 1;i <= 9;i++) {43 if(row[x][i - 1] == -1 && ring[y][i - 1] == -1 &&
44 get_group[group[x][y]][i - 1] == -1 && value[x][y] == 0) {45 value[x][y] =i;46 row[x][i - 1] = 1;47 ring[y][i - 1] = 1;48 get_group[group[x][y]][i - 1] = 1;49 dfs(step + 1);50 value[x][y] = 0;51 row[x][i - 1] = -1;52 ring[y][i - 1] = -1;53 get_group[group[x][y]][i - 1] = -1;54 }55 }56 }57 }58 }59
60 public static voidmain(String[] args) {61 Main test = newMain();62 test.init();63 Scanner in = newScanner(System.in);64 for(int i = 0;i < 9;i++) {65 String s =in.next();66 for(int j = 0;j < s.length();j++) {67 int t = s.charAt(j) - '0';68 value[i][j] =t;69 if(t != 0) {70 row[i][t - 1] = 1;71 ring[j][t - 1] = 1;72 get_group[group[i][j]][t - 1] = 1;73 }74 }75 }76 test.dfs(0);77 }78 }
7 题目7
给定平面内平行于坐标轴的一个矩形,从矩形内选
择一些点,从这些点向右和向上各射出一条射线,
请问:这些射线将矩形分成了多少份。
数据格式:
输入的第一行包含两个整数x, y,表示矩形是由(0,0), (x, 0), (x, y), (0, y)四个点围成的。
第二行包含一个整数n,表示矩形内的点的数量。
接下来n行,每个两个整数xi, yi,表示矩形内的一
个点。输入保证所有的点都在矩形内部而且没有两
个点有相同的横坐标或纵坐标。
输出一个整数,表示从给定的点射出的射线将矩形
分成的份数。
例如,输入:10 10
3
1 3
3 1
2 4程序应该输出:6【数据规模和约定】
对于10%的数据,1<=n<=10,1<=x, y<=100;
对于30%的数据,1<=n<=1000,1<=x,y<=1000;
对于60%的数据,1<=n<=10000,1<=x,y<=1000000;
对于100%的数据,1<=n<=100000,1<=x,y<=1000000000,1
资源约定:
峰值内存消耗(含虚拟机)<256M
CPU消耗<1000ms
请严格按要求输出,不要画蛇添足地打印类似:“
请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝
提交该源码。
注意:不要使用package语句。不要使用jdk1.7及
以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码
处理。
以下代码仅供参考,不保证答案的正误哦。
1 importjava.util.ArrayList;2 importjava.util.Arrays;3 importjava.util.Collections;4 importjava.util.Comparator;5 importjava.util.Scanner;6
7 public classMain {8 public static longx, y;9 public static intn;10 public staticPoint[] P;11 public static long count = 1;12 public static ArrayList list = new ArrayList();13
14 class MyComparator implements Comparator{15
16 public intcompare(Point arg0, Point arg1) {17 if(arg0.x >arg1.x)18 return 1;19 else if(arg0.x arg0.y)23 return 1;24 else if(arg0.y
27 return 0;28 }29 return 0;30 }31
32 }33
34 static classPoint {35 public intx;36 public inty;37
38 public Point(int x, inty) {39 this.x =x;40 this.y =y;41 }42 }43
44 public voidgetResult() {45 Arrays.sort(P, newMyComparator());46 list.add(P[n - 1].y);47 count++;48 for(int i = n - 2;i >= 0;i--) {49 if(P[i].x == P[i + 1].x) {50 if(P[i + 1].y >P[i].y) {51 int j = list.indexOf(P[i + 1].y);52 list.remove(j);53 list.add(P[i].y);54 }55 count++;56 }57 else{58 Collections.sort(list);59 int j = 0;60 for(;j < list.size();j++)61 if(list.get(j) >=P[i].y)62 break;63 count = count + j + 1;64 if(!list.contains(P[i].y))65 list.add(P[i].y);66 }67 }68 System.out.println(count);69 }70
71 public static voidmain(String[] args) {72 Main test = newMain();73 Scanner in = newScanner(System.in);74 x =in.nextLong();75 y =in.nextLong();76 n =in.nextInt();77 P = newPoint[n];78 for(int i = 0;i < n;i++) {79 int x =in.nextInt();80 int y =in.nextInt();81 P[i] = newPoint(x, y);82 }83 test.getResult();84 }85 }