蓝桥杯java历年真题及答案整理共129道题目及答案.doc

上传人:s****u 文档编号:12779758 上传时间:2020-05-24 格式:DOC 页数:251 大小:2.47MB
返回 下载 相关 举报
蓝桥杯java历年真题及答案整理共129道题目及答案.doc_第1页
第1页 / 共251页
蓝桥杯java历年真题及答案整理共129道题目及答案.doc_第2页
第2页 / 共251页
蓝桥杯java历年真题及答案整理共129道题目及答案.doc_第3页
第3页 / 共251页
点击查看更多>>
资源描述
蓝桥杯java历年真题及答案整理(参考网络资料整理出来)1.字符排序算法是这样的,如果给定N个不同字符,将这N个字符全排列,最终的结果将会是N!种。如:给定 A、B、C三个不同的字符,则结果为:ABC、ACB、BAC、BCA、CAB、CBA一共3!=3*2=6种情况。package Question1_9;import java.util.Scanner;import java.util.Vector;public class Question1 public static long count=0;private void fullPermutation(Vectorsourse, Vector result) if(sourse.size()=0)for (int i = 0; i result.size(); i+) System.out.print(result.elementAt(i);System.out.print(n);count+;return;for (int i = 0; i sourse.size(); i+) Vectortsourse=new Vector(sourse);Vectortresult=new Vector(result);tresult.add(sourse.elementAt(i);tsourse.remove(i);new Question1().fullPermutation(tsourse, tresult);public static void main(String args) Scanner scanner=new Scanner(System.in);int n=scanner.nextInt();Vector sourse=new Vector();Vector result=new Vector();for (int i = 0; i n; i+) sourse.add(char)(A+i);new Question1().fullPermutation(sourse, result);System.out.println(Question1.count);方法二:import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Scanner; import java.util.Set; public class Demo03 / 去掉重复元素,放入lis public static void removeDuplicate(String s,Set lis) for(char x:s.toCharArray() lis.add(x); / 为方便操作 将 sets 转 lis public static void convert(List lis,Set sets) Iterator iter = sets.iterator(); while(iter.hasNext() lis.add(iter.next(); / 检测符合条件的元素组合 public static void check(Set sets) List lis = new ArrayList(); convert(lis,sets); / 为方便操作 将 sets 转 lis StringBuffer sb = new StringBuffer(); for(int i=0;ilis.size()-2;i+) for(int j=i+1;j+1lis.size();j+) / 向后添加两位,所以 j+1lis.size() for(int k=j+1;klis.size();k+) sb.append(lis.get(i); sb.append(lis.get(j); sb.append(lis.get(k); System.out.println(sb); / 输出组合 sb.setLength(0); / 清空 public static void main(String args) Scanner scan = new Scanner(System.in); System.out.println(输入串(不大于30个字符)。); String s = scan.nextLine(); Set sets = new LinkedHashSet(); removeDuplicate(s,sets); / 去掉重复元素,放入lis check(sets); / 检测符合条件的元素组合 运行结果:输入串(不大于30个字符)。 abcd abc abd acd bcd 2.串的简单处理串的处理在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:1.把每个单词的首字母变为大写。2.把数字与字母之间用下划线字符(_)分开,使得更清晰3.把单词中间有多个空格的调整为1个空格。例如:用户输入:you and me what cpp2005program则程序输出:You And Me What Cpp_2005_program用户输入:this is a 99cat则程序输出:This Is A 99_cat我们假设:用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个单词间由1个或多个空格分隔。假设用户输入的串长度不超过200个字符。package Question1_9;import java.util.Scanner;import java.util.Vector;public class Question2 public static void main(String args) Scanner scanner=new Scanner(System.in);String string=scanner.nextLine();Vectorvector=new Vector();for (int i = 0; i string.length(); i+) vector.add(string.charAt(i);try int index=0;while (index=a&vector.elementAt(index)=a&vector.elementAt(index)=a&vector.elementAt(index)=0&vector.elementAt(index-1)=a&vector.elementAt(index-1)=0&vector.elementAt(index)=9)vector.add(index, _);index+;index+;for (int i = 0; i vector.size(); i+) System.out.print(vector.elementAt(i);System.out.println(); catch (ArrayIndexOutOfBoundsException e) / TODO: handle exception运行结果:you and me what cpp2005programYou And Me What Cpp_2005_program方法二:import java.util.Scanner;import java.util.regex.Matcher;import java.util.regex.Pattern;/* * 本题目即是要求程序对用户输入的串进行处理。具体规则如下: *1.把每个单词的首字母变为大写。 *2.把数字与字母之间用下划线字符(_)分开,使得更清晰 *3.把单词中间有多个空格的调整为1个空格。 *我们假设:用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个单词间由1个或多个空格分隔。 *假设用户输入的串长度不超过200个字符。 */public class SimpleString public static void main(String args)String str=;str=(new Scanner(System.in).nextLine();String str1=str.split( +);for(int i=0;istr1.length;i+)str1i=String.valueOf(char)(str1i.charAt(0)+(A-a)+str1i.substring(1);String s=;for(int i=0;istr1.length-1;i+)/System.out.print(str1i+ );s+=str1i+ ;s+=str1str1.length-1;Pattern p=Pattern.compile(0-9+);Matcher m=p.matcher(s);String fin=;int st=0;while(m.find()int start=m.start();int end=m.end();fin+=s.substring(st,start);if(s.charAt(start-1)!= )fin+=_;fin+=m.group(1);if(s.charAt(end)!= )fin+=_;st=end;if(sts.length()fin+=s.substring(st);System.out.println(fin);方法三:import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Demo02 public static void print(String s) for(int i=0;is.length-1;i+) System.out.print(si+ ); System.out.println(ss.length-1); public static void main(String args) Scanner scan = new Scanner(System.in); String s = scan.nextLine(); String ss = s.split(s+); for(int i=0;iss.length;i+) String up = (+ssi.charAt(0).toUpperCase(); / 大写 StringBuffer sb = new StringBuffer(ssi); ssi = sb.replace(0, 1, up).toString(); Matcher m = Pattern.compile(d+).matcher(ssi); while(m.find() String num = new String(m.group(); String num2 = num; num2 = _+num+_; / 数字前添加_ ssi = ssi.replace(num, num2); if(ssi.startsWith(_) / 去头_ ssi = ssi.substring(1); if(ssi.endsWith(_) / 去尾_ ssi = ssi.substring(0,ssi.length()-1); print(ss); 运行结果:you and me what cpp2005program You And Me What Cpp_2005_program3.猜算式 看下面的算式: x = x 它表示:两个两位数相乘等于一个两位数乘以一个三位数。如果没有限定条件,这样的例子很多。但目前的限定是:这9个方块,表示19的9个数字,不包含0。该算式中1至9的每个数字出现且只出现一次!比如:46 x 79 = 23 x 15854 x 69 = 27 x 13854 x 93 = 27 x 186.请编程,输出所有可能的情况!注意:左边的两个乘数交换算同一方案,不要重复输出!不同方案的输出顺序不重要package Question1_9;import java.util.ArrayList;import java.util.List;import java.util.Scanner;import java.util.Vector;public class Question3 public static long count=0;public static ListVector filteredNonRedundantResults;private static boolean isfilter(Vector result) int a=(result.elementAt(0)-0)*10+(result.elementAt(1)-0);int b=(result.elementAt(2)-0)*10+(result.elementAt(3)-0);int c=(result.elementAt(4)-0)*10+(result.elementAt(5)-0);int d=(result.elementAt(6)-0)*100+(result.elementAt(7)-0)*10+(result.elementAt(8)-0);if(a*b=c*d)return true;return false;public static void print(Vectorvector) System.out.printf(%c%c x %c%c = %c%c x %c%c%c,vector.elementAt(0),vector.elementAt(1),vector.elementAt(2),vector.elementAt(3),vector.elementAt(4),vector.elementAt(5),vector.elementAt(6),vector.elementAt(7),vector.elementAt(8);private static void fullPermutation(Vectorsourse, Vector result) if(sourse.size()=0&isfilter(result)boolean exit=false;for (int i = 0; i filteredNonRedundantResults.size(); i+) int ra=(result.elementAt(0)-0)*10+(result.elementAt(1)-0);int rb=(result.elementAt(2)-0)*10+(result.elementAt(3)-0);int fa=(filteredNonRedundantResults.get(i).elementAt(0)-0)*10+(filteredNonRedundantResults.get(i).elementAt(1)-0);int fb=(filteredNonRedundantResults.get(i).elementAt(2)-0)*10+(filteredNonRedundantResults.get(i).elementAt(3)-0);if(ra=fb&rb=fa)exit=true;break;if(exit=false)filteredNonRedundantResults.add(new Vector(result);return;for (int i = 0; i sourse.size(); i+) result.add(sourse.elementAt(i);sourse.remove(i);fullPermutation(sourse, result);sourse.add(i, result.elementAt(result.size()-1);result.remove(result.size()-1);public static void main(String args) Scanner scanner=new Scanner(System.in);int n=9;Vector sourse=new Vector();Vector result=new Vector();for (int i = 1; i = n; i+) sourse.add(char)(0+i);Question3.filteredNonRedundantResults=new ArrayListVector();Question3.fullPermutation(sourse, result);for (int i = 0; i Question3.filteredNonRedundantResults.size(); i+) Question3.print(Question3.filteredNonRedundantResults.get(i);System.out.println();运行结果:46 x 79 = 23 x 15854 x 69 = 27 x 13854 x 93 = 27 x 18658 x 67 = 29 x 13458 x 69 = 23 x 17458 x 73 = 29 x 14658 x 96 = 32 x 17463 x 74 = 18 x 25964 x 79 = 32 x 15873 x 96 = 12 x 58476 x 98 = 14 x 532方法二:import java.util.List; import java.util.ArrayList; public class Demo01 static List lis = new ArrayList(); / 结果1(有重复的结果) static List lis2 = new ArrayList(); / 结果2(去重复后的结果) / 初始化数组为19 public static void init(int n) for(int i=0;i9;i+) ni = i+1; / 初始化数组为19 / 是否重复 public static boolean isDup(String s1,String s2) String a1 = s1.substring(0,2); String a2 = s1.substring(2,4); String b1 = s2.substring(0,2); String b2 = s2.substring(2,4); if(a1.equals(b2)&a2.equals(b1) return true; else return false; / 去除lis重复元素 public static void removeDuplicate() lis2.add(lis.get(0); for(int i=1;ilis.size();i+) boolean flag = true; / 标记是否重复 for(int j=0;j=end) check(n); / 检测结果,符合条件的输出 return ; else for(int i=start;i=end;i+) int t = nstart; / 交换元素 nstart = ni; ni = t; / 递归全排列 allSort(n,start+1,end); t = nstart; / 还原元素 nstart = ni; ni = t; public static void fun() int n = new int9; init(n); / 初始化数组为19 allSort(n,0,n.length-1); / 全排列测试 removeDuplicate(); / 去除重复元素 public static void main(String args) fun(); / print(); / 输出结果 运行结果:46 x 79 = 23 x 158 54 x 69 = 27 x 138 54 x 93 = 27 x 186 58 x 67 = 29 x 134 58 x 69 = 23 x 174 58 x 73 = 29 x 146 58 x 96 = 32 x 174 63 x 74 = 18 x 259 64 x 79 = 32 x 158 73 x 96 = 12 x 584 76 x 98 = 14 x 5324.Excel地址转换 Excel是最常用的办公软件。每个单元格都有唯一的地址表示。比如:第12行第4列表示为:“D12”,第5行第255列表示为“IU5”。事实上,Excel提供了两种地址表示方法,还有一种表示法叫做RC格式地址。第12行第4列表示为:“R12C4”,第5行第255列表示为“R5C255”。你的任务是:编写程序,实现从RC地址格式到常规地址格式的转换。【输入、输出格式要求】用户先输入一个整数n(n0) String string=scanner.nextLine();String strings=string.split(C);strings0=strings0.substring(1, strings0.length();int hangshu=Integer.parseInt(strings0),lieshu=Integer.parseInt(strings1);/获取行数和列数/* * 对列数进行变换 */Stackstack=new Stack();while(lieshu0)if(lieshu%26=0)stack.push(Z);lieshu=lieshu/26-1;else stack.push(char)(A-1+lieshu%26);lieshu=lieshu/26;while (!stack.empty() System.out.print(stack.pop();System.out.println(hangshu);n-;运行结果:输入一个整数n(n t) count+; n -= t; else return count; / 添加余数对应的字母 public static char f(int n) if(n=26) return Z; else return (char)(A-1+n%26); / 计算结果 public static String fun(int Row,int Col) StringBuffer sb = new StringBuffer(); int count = checkCount(Col); / 计算出字母的个数 while(count0) if(Col%26=0) /如果能除尽 / 例(702):702/26时(2余0) 应该分配成(1,26) / 个位 加26(Z)时 就等于 十位上的2 去掉(1个26),(一个(个位的26)对应一个(十位的1) / 修改n的值 2-1; n就等于1; 这时就分配成了(1,26); sb.insert(0,Z); / 添加Z Col = Col/26 -1; else sb.insert(0,f(Col);/ 添加余数r对应的字母 Col /= 26; / 修改 n 的值 count-; sb.append(Row); / RC地址后添加(行号) return sb.toString(); / 输入数据 public static void input(String s) Scanner scan = new Scanner(System.in); int i = 0; while(is.length) / 输入n个数据 si+ = scan.nextLine(); / 拆分并计算结果 public static void splitOper(String s) Pattern p = Pattern.compile(0-9+); / 以数字做分隔 for(int i=0;is.length;i+) Matcher m = p.matcher(si); / 得到所有数字 m.find(); / 得到第一个数字 int Row = Integer.parseInt(m.group(); / 取出第一个数字 m.find(); / 得到第二个数字 int Col = Integer.parseInt(m.group(); / 取出第二个数字 System.out.println(fun(Row,Col); / 计算结果并输出 / 主函数 public static void main(String args) Scanner scan = new Scanner(System.in); System.out.println(输入一个整数n(n100)); String s = new Stringscan.nextInt(); input(s); / 输入数据 splitOper(s); / 拆分并计算结果 运行结果:输入一个整数n(n100) 2 R12C4 R5C255 D12 IU5 5.手机尾号评分 30年的改革开放,给中国带来了翻天覆地的变化。2011全年中国手机产量约为11.72亿部。手机已经成为百姓的基本日用品!给手机选个好听又好记的号码可能是许多人的心愿。但号源有限,只能辅以有偿选号的方法了。这个程序的目的就是:根据给定的手机尾号(4位),按照一定的规则来打分。其规则如下:1. 如果出现连号,不管升序还是降序,都加5分。例如:5678,4321都满足加分标准。2. 前三个数字相同,或后三个数字相同,都加3分。例如:4888,6665,7777都满足加分的标准。注意:7777因为满足这条标准两次,所以这条规则给它加了6分。3. 符合AABB或者ABAB模式的加1分。例如:2255,3939,7777都符合这个模式,所以都被加分。注意:7777因为满足这条标准两次,所以这条标准给它加了2分。4. 含有:6,8,9中任何一个数字,每出现一次加1分。例如4326,6875,9918都符合加分标准。其中,6875被加2分;9918被加3分。尾号最终得分就是每条标准的加分总和!要求程序从标准输入接收数据,在标准输出上输出结果。输入格式为:第一行是一个整数n(0) String telphone=scanner.nextLine();int sum=0;/* * 情况一 */if(telphone.charAt(0)-telphone.charAt(1)=1)char ch=telphone.charAt(0);int index=0;while (index=4)sum+=5;if (telphone.charAt(0)-telphone.charAt(1)=-1) char ch=telphone.charAt(0);int index=0;while (index=4)sum+=5;/* * 情况二 */if (telphone.charAt(0)=telphone.charAt(1)&telphone.charAt(1)=telphone.charAt(2) sum+=3;if(telphone.charAt(1)=telphone.charAt(2)&telphone.charAt(2)=telphone.charAt(3)sum+=3;/* * 情况三 */if(telphone.charAt(0)=telphone.charAt(1)&telphone.charAt(2)=telphone.charAt(3)sum+=1;if(telphone.charAt(0)=telphone.charAt(2)&telphone.charAt(1)=telphone.charAt(3)sum+=1;/* * 情况四 */for (int i = 0; i 4; i+) if(telphone.charAt(i)=6|telphone.charAt(i)=8|telphon
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!