F、奇妙的数字
小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。
你能猜出这个数字是多少吗?
请填写该数字,不要填写任何多余的内容。
题解:
package demo; import java.util.HashSet; public class demo { public static void main(String[] args) { for (int i = 40; i < 100; i++) { // 求一个数的平方和立方并存储并合并到一个字符串中 String str = (long)Math.pow(i, 2)+""+(long)Math.pow(i, 3); HashSet<Character> set = new HashSet<Character>(); // 存储字符串的每一个字符 // 插入数据 for (int j = 0; j < str.length(); j++) { set.add(str.charAt(j)); } // 判断长度是否为10 if (set.size() != 10) { continue; } else { System.out.println(i); } } } }
G、加法变乘法
我们都知道:1+2+3+ ... + 49 = 1225
现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015
比如:
1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015
就是符合要求的答案。
请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。
注意:需要你提交的是一个整数,不要填写任何多余的内容。
题解:
package demo; public class demo { public static void main(String[] args) { for (int i = 0; i < 47; i++) { for (int j = i + 2; j < 49; j++) { if (1225 + i * i + j * j == 2015 + (i + 1) + (j + 1)) { System.out.println(i); } } } } }
H、移动距离
X星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为1,2,3...
当排满一行时,从下一行相邻的楼往反方向排号。
比如:当小区排号宽度为6时,开始情形如下:
1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 .....
我们的问题是:已知了两个楼号m和n,需要求出它们之间的最短移动距离(不能斜线方向移动)
输入为3个整数w m n,空格分开,都在1到10000范围内
要求输出一个整数,表示m n 两楼间最短移动距离。
例如:
用户输入:
6 8 2
则,程序应该输出:
4
再例如:
用户输入:
4 7 20
则,程序应该输出:
5
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
题解:
package demo; import java.util.Scanner; public class demo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int w = sc.nextInt(); int m = sc.nextInt(); int n = sc.nextInt(); // 第一个数字 int x1 = ((m - 1) / w) + 1; // 行数 int y1 = 0; if (x1 % 2 != 0) { // 判断奇偶性 y1 = m - (x1 - 1) * w; } else { y1 = w - (m - (w + 1)); } // 第二个数字 int x2 = ((n - 1) / w) + 1; // 行数 int y2 = 0; if (x2 % 2 != 0) { // 判断奇偶性 y2 = n - (x2 - 1) * w; } else { y2 = w - (n - (w + 1)); } System.out.println(Math.abs(x2 - x1) + Math.abs(y2 - y1)); sc.close(); } }
I、打印大X
小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。
为了便于比对空格,所有的空白位置都以句点符来代替。
要求输入两个整数m n,表示笔的宽度,X的高度。用空格分开(0<m<n, 3<n<1000, 保证n是奇数)
要求输出一个大X
例如,用户输入:
3 9
程序应该输出:
***.....***
.***...***.
..***.***..
...*****...
....***....
...*****...
..***.***..
.***...***.
***.....***
(如有对齐问题,参看【图1.jpg】)
资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
题解:
package demo; import java.util.Scanner; public class demo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int x = sc.nextInt(); int y = sc.nextInt(); char[][] arr = new char[y][y + x - 1]; // 给数组赋值. for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { arr[i][j] = '.'; } } // 从左上到右下 for (int i = 0; i < arr.length; i++) { for (int j = i; j < i + x; j++) { arr[i][j] = '*'; } } // 从右上到坐下 for (int i = 0; i < arr.length; i++) { for (int j = arr[i].length - i - 1; j > arr[i].length - i - 1 - x; j--) { arr[i][j] = '*'; } } // 打印 for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { System.out.print(arr[i][j]); } System.out.println(); } sc.close(); } }