java 蓝桥杯 趣味算式

来源:互联网 发布:java四种访问修饰符 编辑:程序博客网 时间:2024/05/18 03:35

匪警请拨110,即使手机欠费也可拨通!

为了保障社会秩序,保护人民群众生命财产安全,警察叔叔需要与罪犯斗智斗勇,因而需要经常性地进行体力训练和智力训练!

某批警察叔叔正在进行智力训练:

1 2 3 4 5 6 7 8 9 = 110;

请看上边的算式,为了使等式成立,需要在数字间填入加号或者减号(可以不填,但不能填入其它符号)。之间没有填入符号的数字组合成一个数,例如:12+34+56+7-8+9 就是一种合格的填法;123+4+5+67-89 是另一个可能的答案。

请你利用计算机的优势,帮助警察叔叔快速找到所有答案。

每个答案占一行。形如:

12+34+56+7-8+9 
123+4+5+67-89 
……

已知的两个答案可以输出,但不计分。

各个答案的前后顺序不重要。


方法一:

public class Main{static char k[]={' ','+','-'};public static void main(String args[])   //遍历所有 {for(int a=0;a<3;a++)for(int b=0;b<3;b++)for(int c=0;c<3;c++)for(int d=0;d<3;d++)for(int e=0;e<3;e++)for(int f=0;f<3;f++)for(int g=0;g<3;g++)for(int h=0;h<3;h++){String str=""+1+k[a]+2+k[b]+3+k[c]+4+k[d]+5+k[e]+6+k[f]+7+k[g]+8+k[h]+9;Check(str);}}public static void Check(String str){String str1=str.replace(" ","");int sum=0;int count=0;String str2="";char str3=' ',str4;for(int i=0;i<str1.length();i++){if(str1.charAt(i)!='-'&&str1.charAt(i)!='+'){str2=str2+str1.charAt(i);}else {if(count==0) {sum=Integer.valueOf(str2);}   //主要用于第一个数的记录if(count==1){if(str3=='+')sum+=Integer.valueOf(str2);   //举例 1+2-3  这里的str3是加号   遇到两次加减符号才做1+2这个运算else  sum-=Integer.valueOf(str2);count=0;}str2="";     //为下次计数做前提str3=str1.charAt(i);    //这里才记录上面那个例子中的减号count++;}}if(str3=='+')sum+=Integer.valueOf(str2);  //处理最后一个运算符else  sum-=Integer.valueOf(str2);if(sum==110)System.out.println(str1);}}


方法二:

public class Main{static char k[]={' ','+','-'};public static void main(String args[]) {String str="123456789";dfs(str,1);}public static void dfs(String str,int n)   //遍历所有 {if(n==9)Check(str);else {dfs(str.replace(n+"", n+"+"),n+1);dfs(str.replace(n+"", n+"-"),n+1);dfs(str,n+1);}}public static void Check(String str){String str1=str.replace(" ","");int sum=0;int count=0;String str2="";char str3=' ',str4;for(int i=0;i<str1.length();i++){if(str1.charAt(i)!='-'&&str1.charAt(i)!='+'){str2=str2+str1.charAt(i);}else {if(count==0) {sum=Integer.valueOf(str2);}   //主要用于第一个数的记录if(count==1){if(str3=='+')sum+=Integer.valueOf(str2);   //举例 1+2-3  这里的str3是加号   遇到两次加减符号才做1+2这个运算else  sum-=Integer.valueOf(str2);count=0;}str2="";     //为下次计数做前提str3=str1.charAt(i);    //这里才记录上面那个例子中的减号count++;}}if(str3=='+')sum+=Integer.valueOf(str2);  //处理最后一个运算符else  sum-=Integer.valueOf(str2);if(sum==110)System.out.println(str1);}}



0 0
原创粉丝点击