编程挑战(一)分数表示法

来源:互联网 发布:公司网络监控手机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;}}

方法二:
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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 百度网盘内存不够怎么办 百度网盘储存空间不足怎么办 百度网盘手机号注销了怎么办 手机系统升级后照片没了怎么办 换手机照片没了怎么办 苹果手机icloud满了怎么办 百度网盘密码忘记怎么办 手机卡不用了支付宝账号怎么办 手机校园网不弹出登录界面怎么办 百度云需要邮箱验证怎么办 网页百度网盘不播放视频怎么办 手机qq邮箱中转站容量不足怎么办 qq邮箱容量满了怎么办 手机邮箱中转站容量不足怎么办 微信号登陆要好友验证怎么办 邮箱账号名忘了怎么办 苹果六话筒坏了怎么办 iphone后置摄像头坏了怎么办 苹果8听歌声音小怎么办 酷狗音乐没了怎么办 手机听歌音量小怎么办 苹果手机酷狗音乐打不开怎么办 电脑酷狗音乐打不开怎么办 酷狗音乐无法运行播放怎么办? 酷狗音乐停止运行怎么办 米6蓝牙声音小怎么办 手里酷狗id丢了怎么办 连麦声音不好听怎么办 微信语音声音很难听怎么办 微信聊天语音没有声音怎么办 微信发语音声音不好听怎么办 微信语音说话不好听怎么办 微信字体变粗怎么办 笔记本无法识别usb设备怎么办 手机qq音乐闪退怎么办 qq音乐总是闪退怎么办 手机qq音乐闪退怎么办修复 苹果7p耳机漏音怎么办 akgn25耳机盖掉了怎么办 外汇平台跑路了怎么办 微云资料没了怎么办