算法笔记_121:蓝桥杯第六届省赛(Java语言C组部分习题)试题解答
目录
前言:以下试题解答代码部分仅供参考,若有不当之处,还请路过的同学提醒一下~
1 隔行变色
隔行变色 Excel表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式。 小明设计的样式为:第1行蓝色,第2行白色,第3行蓝色,第4行白色,.... 现在小明想知道,从第21行到第50行一共包含了多少个蓝色的行。 请你直接提交这个整数,千万不要填写任何多余的内容。 15
public class Main { public static void main(String[] args) { int count = 0; for(int i = 21;i <= 50;i++) { if(i % 2 == 1) count++; } System.out.println(count); } }
2 立方尾不变
立方尾不变 有些数字的立方的末尾正好是该数字本身。 比如:1,4,5,6,9,24,25,.... 请你计算一下,在10000以内的数字中(指该数字,并非它立方后的数值),符合这个特征的正整数一共有多少个。 请提交该整数,不要填写任何多余的内容。 36
public class Main { public static void main(String[] args) { int count = 0; for(long i = 1;i <= 10000;i++) { long temp = i * i * i; String A = temp + ""; String B = i + ""; int len = B.length(); int judge = Integer.valueOf(A.substring(A.length() - len, A.length())); if(i == judge) { System.out.println("i = "+i+", A = "+A); count++; } } System.out.println(count); } }
3 无穷分数
无穷分数 无穷的分数,有时会趋向于固定的数字。 请计算【图1.jpg】所示的无穷分数,要求四舍五入,精确到小数点后5位,小数位不足的补0。 请填写该浮点数,不能填写任何多余的内容。 0.58198
public class Main { public static void main(String[] args) { double temp = 10000000 * 1.0 / 1000001; double result = 0; for(int i = 10000000;i >= 1;i--) { result = i - 1 + temp; temp = (i - 1) / result; } System.out.printf("%.5f",result); } }
4 格子中输出
格子中输出 stringInGrid方法会在一个指定大小的格子中打印指定的字符串。 要求字符串在水平、垂直两个方向上都居中。 如果字符串太长,就截断。 如果不能恰好居中,可以稍稍偏左或者偏上一点。 下面的程序实现这个逻辑,请填写划线部分缺少的代码。 public static void stringInGrid(int width, int height, String s) { if(s.length()>width-2) s = s.substring(0,width-2); System.out.print("+"); for(int i=0;i<width-2;i++) System.out.print("-"); System.out.println("+"); for(int k=1; k<(height-1)/2;k++){ System.out.print("|"); for(int i=0;i<width-2;i++) System.out.print(" "); System.out.println("|"); } System.out.print("|"); String ff = _______________________________________________________; //填空 System.out.print(String.format(ff,"",s,"")); System.out.println("|"); for(int k=(height-1)/2+1; k<height-1; k++){ System.out.print("|"); for(int i=0;i<width-2;i++) System.out.print(" "); System.out.println("|"); } System.out.print("+"); for(int i=0;i<width-2;i++) System.out.print("-"); System.out.println("+"); } 对于题目中数据,应该输出: +------------------+ | | | abcd1234 | | | | | +------------------+ (如果出现对齐问题,参看【图1.jpg】) //注意:ff中有三个%s分别对应第一段空格字符,第二段函数给定变量s字符串字符,第三段空格字符 //其中%s表示打印一个字符串变量,%is表示打印出长度为i的空格字符串 //System.out.print(String.format(ff,"",s,""));该语句后面"",s,""分别表示变量1,2,3。即对应第一段字符串,第二段字符串,第三段字符串。而ff则为输出格式。 "%"+((width-2-s.length())/2)+"s%s%"+((width-1-s.length())/2)+"s"
5 奇妙的数字
奇妙的数字 小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。 你能猜出这个数字是多少吗? 请填写该数字,不要填写任何多余的内容。 69
import java.util.Arrays; public class Main { public static void main(String[] args) { for(long i = 10;i < 200;i++) { long temp1 = i * i; long temp2 = i * i * i; String A = temp1 + ""; String B = temp2 + ""; int len = A.length() + B.length(); if(len == 10) { long[] array = new long[10]; int j = 0; while(temp1 > 0) { array[j++] = temp1 % 10; temp1 = temp1 / 10; } while(temp2 > 0) { array[j++] = temp2 % 10; temp2 = temp2 / 10; } Arrays.sort(array); for(j = 0;j < 10;j++) { if(array[j] == j) continue; else break; } if(j == 10) System.out.println("i = "+i+", i^2 = "+(i*i)+", i^3 = "+(i*i*i)); } } } }
6 打印大X
打印大X 小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。 为了便于比对空格,所有的空白位置都以句点符来代替。 要求输入两个整数m n,表示笔的宽度,X的高度。用空格分开(0<m<n, 3<n<1000, 保证n是奇数) 要求输出一个大X 例如,用户输入: 3 9 程序应该输出: ***.....*** .***...***. ..***.***.. ...*****... ....***.... ...*****... ..***.***.. .***...***. ***.....*** (如有对齐问题,参看【图1.jpg】) 再例如,用户输入: 4 21 程序应该输出 ****................**** .****..............****. ..****............****.. ...****..........****... ....****........****.... .....****......****..... ......****....****...... .......****..****....... ........********........ .........******......... ..........****.......... .........******......... ........********........ .......****..****....... ......****....****...... .....****......****..... ....****........****.... ...****..........****... ..****............****.. .****..............****. ****................**** (如有对齐问题,参看【图2.jpg】) 资源约定: 峰值内存消耗(含虚拟机) < 256M CPU消耗 < 1000ms 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。 所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。 注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。 注意:主类的名字必须是:Main,否则按无效代码处理。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int m = in.nextInt(); int n = in.nextInt(); char[][] A = new char[n][n + m - 1]; for(int i = 0;i < n;i++) for(int j = 0;j < n + m - 1;j++) A[i][j] = '.'; int mid = n / 2; for(int i = 0;i <= mid;i++) { int startL = i, endL = i + m - 1; //X左边星号开始于截止纵坐标 int startR = n - 1 - i, endR = n + m - 2 - i; //X右边星号起止纵坐标 for(int j = startL;j <= endL;j++) { A[i][j] = '*'; A[n - 1 - i][j] = '*'; } for(int j = startR;j <= endR;j++) { A[i][j] = '*'; A[n - 1 - i][j] = '*'; } } //打印题意结果 for(int i = 0;i < n;i++) { for(int j = 0;j < n + m - 1;j++) System.out.print(A[i][j]); System.out.println(); } } }
每天一小步,成就一大步