蓝桥杯2012省赛——趣味算式

匪警请拨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 …
已知的两个答案可以输出,但不计分。
各个答案的前后顺序不重要。
注意:
请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!
请把所有类写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。
相关的工程文件不要拷入。
请不要使用package语句。
源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。

public class lanqiao2012_9 {
	static char []arr = {'1',' ','2',' ','3',' ','4',' ','5',' ','6',' ','7',' ','8',' ','9'};
	static int aaa=0;
	public static int transform(char[] s){
		String ka = Arrays.toString(s).replace(",","").replaceAll(" ","").trim();
		String result = ka.substring(1, ka.length()-1);
		
		int INDEX = result.length();
//		System.out.println(INDEX);
		int [] re = new int [INDEX];
		int j=0;
		int i=0;
		for(;i<=INDEX-1;){
			if(s[j]==' '){
				j++;
				continue;}
			re[i]=s[j]-'0';
			i++;
			j++;
		}
		
		int count = 0;
		int sum = 0;
		int index = 0;
		for(int k=0;k<re.length;k++){
			 if(k==re.length-1){
				 if(count==0)
					re[index]=re[k];
				 if(count>0){sum=0;
					 for(int ss=count;ss>0;ss--){
						
						sum = sum+(int)(re[k-ss]*Math.pow(10,ss-1));
						}
					 	sum = sum*10+re[re.length-1];
					 re[index]=sum;}
				}
			else if(re[k]>0) {count++;
			}
			
			else {
				for(int ss=count;ss>0;ss--){
					
					sum = sum+(int)(re[k-ss]*Math.pow(10,ss-1));
					}
				re[index++] = sum;
				re[index++]= re[k];
				count=0;
				sum=0;
			}
		}
//		System.out.println("第二次"+Arrays.toString(re));
		int res=re[0];
		for(int l=1;l<=index;l=l+2){
			if(re[l]==-3){
				res = res -re[l+1];
			}
			if(re[l]==-5){
				res= res +re[l+1]; 
			}
			if(re[l]==-48){
				break;
			}
		}
		
//		System.out.println(res);
		return res;
	}

public static void main(String[] args) {
	
	dfs(arr,1);
	System.out.println(aaa);	
}

private static void dfs(char[] arr,int k) {
	if(k==17)
	{
		if(transform(arr)==110){
			System.out.println(arr);
			aaa++;
			return;
		}
		else return;
	}
	
	for(int i=0;i<3;i++){
		if(i==0)
		{arr[k]=' ';
		dfs(arr,k+2);}
		 if(i==1)
		{arr[k]='+';
		dfs(arr,k+2);}
		if(i==2)
		{	
			arr[k]='-';
			dfs(arr,k+2);
			}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_43752167/article/details/91409061
今日推荐