java 蓝桥杯 趣味算式

本文介绍了一种利用计算机程序找出在数字1到9间添加加号或减号使得等式123456789等于110的所有可能的方法。通过两种不同的递归算法实现,展示了如何遍历所有可能的组合并验证等式的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

匪警请拨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);	
	}
		
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值