编程挑战(一)分数表示法
来源:互联网 发布:公司网络监控手机qq 编辑:程序博客网 时间:2024/06/04 18:02
方法一:
import java.io.IOException;import java.util.Scanner;/* * b = a + c / d * 0 < b < 65535 * 思路:缩小范围后穷举。缩小范围:0 < a < b-1;c > d,d的位数最大为(9 - a.length)/2。 */public class FractionEquation {public static void main(String[] args) throws IOException {Scanner is = new Scanner(System.in);int i = is.nextInt();if (i <= 0) {System.out.println("输入非法!");return;}int[] k = new int[i];for (int j = i - 1; j >= 0; j--) {Scanner ks = new Scanner(System.in);k[j] = ks.nextInt();if (k[j] <= 0 || k[j] >= 65535) {System.out.println("输入非法!");return;}}for (int p = i - 1; p >= 0; p--) {int n = findEquation(k[p]);System.out.println(n);}}// 查找符合条件的等式private static int findEquation(int b) {int x = 0;for (int i = 1; i < b - 1; i++) {int a = i;if (!isRepeat(a) && !contain(a, 0)) {// d < c,所以d的最大长度为(c.length + d.length)/2int l = (9 - Integer.toString(a).length()) / 2;for (int j = 1; j < Math.pow(10, l); j++) {int d = j;if (!isRepeat(d) && !contain(d, 0) && !contain(d, a)) {int c = (b - a) * d;if (Integer.toString(c).length()+ Integer.toString(d).length()+ Integer.toString(a).length() == 9) {if (!isRepeat(c) && !contain(c, 0)&& !contain(c, a) && !contain(c, d)) {x += 1;//System.out.println(b + " = " + a + " + " + c//+ " / " + d);}}}}}}return x;}// 判断整数j中是否有重复的数字private static boolean isRepeat(int j) {String s = Integer.toString(j);for (int i = 0; i < s.length(); i++) {String m = s.substring(0, i) + "n" + s.substring(i + 1);if (m.contains("" + s.charAt(i))) {return true;}}return false;}// 判断整数j中是否包含整数a的数字private static boolean contain(int j, int a) {String sj = Integer.toString(j);String sa = Integer.toString(a);for (int i = 0; i < sa.length(); i++) {if (sj.contains("" + sa.charAt(i)))return true;}return false;}}
方法二:
两种方法都能在Eclipse上正确编译运行,得到正确结果,但不知道为什么在CSDN编程挑战上提交代码总是报运行错误~~
import java.io.IOException;import java.util.Scanner;/* * b = a + c / d * 0 < b < 65535 * 思路:根据b的位数分析a和c/d可能的位数,根据c/d的位数分析c和d的位数,分多种情况穷举。 */public class ShowEquation {public static void main(String[] args) throws IOException {Scanner is = new Scanner(System.in);int i = is.nextInt();if (i <= 0) {System.out.println("输入非法!");return;}int[] k = new int[i];for (int j = i - 1; j >= 0; j--) {Scanner ks = new Scanner(System.in);k[j] = ks.nextInt();if (k[j] <= 0 || k[j] >= 65535) {System.out.println("输入非法!");return;}}for (int p = i - 1; p >= 0; p--) {int n = findEquation(k[p]);System.out.println(n);}}// 查找符号添加的等式private static int findEquation(int b) {int x = 0;int a;int c;int d;if (Integer.toString(b).length() == 1) {// b为1位数:a为1位数, c/d为1位数,c、d均为4位数,0 < a < b-1for (int i = 1; i < b - 1; i++) {a = i;for (int j = 1000; j < 10000; j++) {// 判断j是否自身重复,是否包含数字a,除去自身有重复数字和包含数字a的部分if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {// 假设j为d,c = (b - a) * d;d = j;c = (b - a) * d;if (c > 1000 && c < 10000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + " + c//+ " / " + d);}}}}}} else if (Integer.toString(b).length() == 2) {// b为2位数:a为1位数或2位数,c/d为1位数或2位数for (int i = 1; i < 10; i++) {// a为1位,不可能重复,c/d为1位数或2位数,c and d// 8位,d最大长度为4,最大为9999,d最小长度为3,最小为100a = i;// d为4位,c为4位for (int j = 1000; j < 10000; j++) {if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 1000 && c < 10000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + " + c//+ " / " + d);}}}}// d为3位,c为5位for (int j = 100; j < 1000; j++) {if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 10000 && c < 100000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + " + c//+ " / " + d);}}}}}for (int i = 10; i < b - 1; i++) {// a为2位数,c/d为1位数或2位数,c and d 7位,d最大3位,最大999,最小3位,最小100,c为4位if (!isRepeat(i) && !contain(i, 0)) {a = i;for (int j = 100; j < 1000; j++) {if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 1000 && c < 10000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + "//+ c + " / " + d);}}}}}}} else if (Integer.toString(b).length() == 3) {// b为3位数:a可以为1,2,3位数for (int i = 1; i < 10; i++) {// a为1位数,c/d为2位数或3位数,c and d 8位数,c为5位数,d为3位数a = i;for (int j = 100; j < 1000; j++) {if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 10000 && c < 100000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + " + c//+ " / " + d);}}}}}for (int i = 10; i < 100; i++) {// a为2位数,c/d为1位数或2位数或3位数,c and d 7位数,d为2位数或3位数,c为4位数或5位数if (!isRepeat(i) && !contain(i, 0)) {a = i;// d为2位,c为5位for (int j = 10; j < 100; j++) {if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 10000 && c < 100000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + "//+ c + " / " + d);}}}}// d为3位,c为4位for (int j = 100; j < 1000; j++) {if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 1000 && c < 10000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + "//+ c + " / " + d);}}}}}}for (int i = 100; i < b - 1; i++) {// a为3位数,c/d为1位数或2位数或3位数,c and d 6位数,d为2或3,c为4或3if (!isRepeat(i) && !contain(i, 0)) {a = i;// d为2位数,c为4位数for (int j = 10; j < 100; j++) {if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 1000 && c < 10000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + "//+ c + " / " + d);}}}}// d为3位,c为3位for (int j = 100; j < 1000; j++) {if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 100 && c < 1000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + "//+ c + " / " + d);}}}}}}} else if (Integer.toString(b).length() == 4) {// b为4位数,a为1、2、3、4位数// a为1位数,c/d为3、4位数for (int i = 1; i < 10; i++) {a = i;// c and d 8位数for (int j = 100; j < 1000; j++) { // 5 3if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 10000 && c < 100000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + " + c//+ " / " + d);}}}}for (int j = 10; j < 100; j++) { // 6 2if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 100000 && c < 1000000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + " + c//+ " / " + d);}}}}}// a为2位数,c/d为3、4位数for (int i = 10; i < 100; i++) {if (!isRepeat(i) && !contain(i, 0)) {a = i;// c and d 7位数for (int j = 10; j < 100; j++) { // 5 2if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 10000 && c < 100000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + "//+ c + " / " + d);}}}}}}// a为3位数,c/d为1、2、3、4位数for (int i = 100; i < 1000; i++) {if (!isRepeat(i) && !contain(i, 0)) {a = i;// c and d 6位数for (int j = 100; j < 1000; j++) { // 3 3if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 100 && c < 1000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + "//+ c + " / " + d);}}}}for (int j = 10; j < 100; j++) { // 4 2if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 1000 && c < 10000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + "//+ c + " / " + d);}}}}for (int j = 1; j < 10; j++) { // 5 1if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 10000 && c < 100000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + "//+ c + " / " + d);}}}}}}// a为4位数,c/d为1、2、3、4位数for (int i = 1000; i < b - 1; i++) {if (!isRepeat(i) && !contain(i, 0)) {a = i;// c and d 5位数,d为1或2// d为1,c为4for (int j = 1; j < 10; j++) {if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 1000 && c < 10000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + "//+ c + " / " + d);}}}}// d为2,c为3for (int j = 10; j < 100; j++) {if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 1000 && c < 10000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + "//+ c + " / " + d);}}}}}}} else if (Integer.toString(b).length() == 5) {// b为5位数for (int i = 1; i < 10; i++) {a = i;// c and d 8位数,c/d为4、5位数// d为2,c为6for (int j = 10; j < 100; j++) {if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 100000 && c < 1000000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + " + c//+ " / " + d);}}}}}// a为2位数,c/d为4、5位数for (int i = 10; i < 100; i++) {if (!isRepeat(i) && !contain(i, 0)) {a = i;// c and d 7位数// d为2,c为5for (int j = 10; j < 100; j++) {if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 10000 && c < 100000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + "//+ c + " / " + d);}}}}// d为1,c为6for (int j = 1; j < 10; j++) {if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 100000 && c < 1000000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + "//+ c + " / " + d);}}}}}}// a为3位数,c/d为4、5位数for (int i = 100; i < 1000; i++) {if (!isRepeat(i) && !contain(i, 0)) {a = i;// c and d 6位数// d为1,c为5for (int j = 1; j < 10; j++) {if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 10000 && c < 100000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + "//+ c + " / " + d);}}}}}}// a为4位数,c/d为1、2、3、4、5位数for (int i = 1000; i < 10000; i++) {if (!isRepeat(i) && !contain(i, 0)) {a = i;// c and d 5位数,d最大为2,最小为1// d为2,c为3for (int j = 10; j < 100; j++) {if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 100 && c < 1000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + "//+ c + " / " + d);}}}}// d为1,c为4for (int j = 1; j < 10; j++) {if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 1000 && c < 10000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + "//+ c + " / " + d);}}}}}}// a为5位数,c/d为1、2、3、4、5位数for (int i = 10000; i < b - 1; i++) {if (!isRepeat(i) && !contain(i, 0)) {a = i;// c and d 4位数,d最大2位,最小为1// d为2位,c为2位for (int j = 10; j < 100; j++) {if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 10 && c < 100) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + "//+ c + " / " + d);}}}}// d为1位,c为3位for (int j = 1; j < 10; j++) {if (!isRepeat(j) && !contain(j, a) && !contain(j, 0)) {d = j;c = (b - a) * d;if (c > 100 && c < 1000) {if (!isRepeat(c) && !contain(c, a)&& !contain(c, d) && !contain(c, 0)) {x += 1;//System.out.println(b + " = " + a + " + "//+ c + " / " + d);}}}}}}}return x;}// 判断整数j中是否有重复的数字private static boolean isRepeat(int j) {String s = Integer.toString(j);for (int i = 0; i < s.length(); i++) {String m = s.substring(0, i) + "n" + s.substring(i + 1);if (m.contains("" + s.charAt(i))) {return true;}}return false;}// 判断整数j中是否包含整数a的数字private static boolean contain(int j, int a) {String sj = Integer.toString(j);String sa = Integer.toString(a);for (int i = 0; i < sa.length(); i++) {if (sj.contains("" + sa.charAt(i)))return true;}return false;}}
两种方法都能在Eclipse上正确编译运行,得到正确结果,但不知道为什么在CSDN编程挑战上提交代码总是报运行错误~~
0 0
- 编程挑战(一)分数表示法
- 编程挑战-高校俱乐部-分数表示法
- 编程挑战(一)
- csdn编程挑战 比赛分数
- 分数表示法
- 分数表示法
- 并发编程的挑战(一)
- Java并发编程(一):并发编程的挑战
- 一、并发编程的挑战
- Java并发编程(一)——挑战
- 不定冠词、序数词、倍数表示法、分数表示法
- 第1周编程题-表示分数类的Fraction
- (挑战编程_2_2)
- 《挑战》读书笔记(一)
- <读书笔记--并发>一、并发编程的挑战
- 《python核心编程》学习笔记(一):正则表达式扩展表示法
- Swift表示分数
- java并发编程(一)--并发编程的优缺点与挑战
- Commands In The CAB (Introduction To CAB/SCSF Part 10)
- 企业文化十论
- RadioGroup 多行多列单选问题
- 递归算法---整数划分
- 即时通讯编解码器
- 编程挑战(一)分数表示法
- 博客之旅,记录点滴
- HadoopFs命令
- Android VLC - vlc_module_begin
- Introduction To Events In The CAB (Introduction To CAB/SCSF Part 11)
- 完美实现类似QQ的自拍头像、上传头像功能!(Demo 源码)
- 求递增正数数组的子数组之和等于给定值
- shell浅谈之十函数
- Linux的五个查找命令分析