A、隔行变色
Excel表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式。
小明设计的样式为:第1行蓝色,第2行白色,第3行蓝色,第4行白色,....
现在小明想知道,从第21行到第50行一共包含了多少个蓝色的行。
请你直接提交这个整数,千万不要填写任何多余的内容。
题解:
package demo; public class demo { public static void main(String[] args) { int color = 0; for (int i = 21; i <= 50; i++) { if (i % 2 != 0) { color++; } } System.out.println(color); } }
B、立方尾不变
有些数字的立方的末尾正好是该数字本身。
比如:1,4,5,6,9,24,25,....
请你计算一下,在10000以内的数字中(指该数字,并非它立方后的数值),符合这个特征的正整数一共有多少个。
请提交该整数,不要填写任何多余的内容。
题解:
package demo; public class demo { public static void main(String[] args) { int count = 0; for (int i = 1; i <= 10000; i++) { String x = i + ""; String cudb = cudb(i) + ""; // 切割立方数最后相应几位 String y = cudb.substring(cudb.length() - x.length()); // 判断是否相同 if (y.equals(x)) { count++; } } System.out.println(count); } /** * @param x * @return */ public static long cudb(int x) { return (long)Math.pow(x, 3); } }
C、无穷分数
无穷的分数,有时会趋向于固定的数字。
请计算【图1.jpg】所示的无穷分数,要求四舍五入,精确到小数点后5位,小数位不足的补0。
请填写该浮点数,不能填写任何多余的内容。
题解:
package demo; public class demo { public static void main(String[] args) { System.out.println(String.format("%.5f", dfs(1, 10))); } /** * 递归求无穷级数 * @param n * @param end * @return */ public static double dfs(int n, int end) { if (n == end) { return n; } return n / (n + dfs(n + 1, end)); } }
D、循环节长度
两个整数做除法,有时会产生循环小数,其循环部分称为:循环节。
比如,11/13=6=>0.846153846153..... 其循环节为[846153] 共有6位。
下面的方法,可以求出循环节的长度。
请仔细阅读代码,并填写划线部分缺少的代码。
public static int f(int n, int m)
{
n = n % m;
Vector v = new Vector();
for(;;)
{
v.add(n);
n *= 10;
n = n % m;
if(n==0) return 0;
if(v.indexOf(n)>=0) _________________________________ ; //填空
}
}
注意,只能填写缺少的部分,不要重复抄写已有代码。不要填写任何多余的文字。
题解:
package demo; public class demo { public static void main(String[] args) { System.out.println(f(11, 13)); } public static int f(int n, int m) { n = n % m; System.out.println(n); java.util.Vector v = new java.util.Vector(); for (;;) { v.add(n); // 将n添加到Vector中 n *= 10; // 将n放大 System.out.println(n); // 测试打印 n = n % m; // 继续取余 System.out.println(n); // 测试打印 if (n == 0) return 0; if (v.indexOf(n) >= 0) { return v.size(); // 填空 } } } }
E、格子中输出
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("+"); }
对于题目中数据,应该输出:
题解:
package demo; public class demo { public static void main(String[] args) { paixu(15, 15, "hhf"); } /** * @param width * @param height * @param s */ public static void paixu(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 = "%" + (width - s.length() - 2) / 2 + "s%s%" + (width - s.length() - 2) / 2 + "s"; // 填空 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("+"); } }