蓝桥杯(java)个人赛真题:凑算式

凑算式

			     B      DEF
			A + --- + ------- = 10
			     C      GHI
			     
			(如果显示有问题,可以参见【图1.jpg】)
				 
				 
			这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
			
			比如:
			6+8/3+952/714 就是一种解法,
			5+3/1+972/486 是另一种解法。
			
			这个算式一共有多少种解法?
			
			注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字。

思路:最简单思路(个人认为)对1~9进行全排列暴力破解,然后进行数学判断结果,符合则由text()方法判断后返回,permute()方法输出;

package Lqb;

import java.util.Arrays;

import javax.swing.Spring;

public class Text12 {

	static int h=0;
	public static void main(String[] args) {
		int[] array={1,2,3,4,5,6,7,8,9};
		permute(array,0);
	}
	//数组验证
		public static int[] text(int[] b){
				int a=b[0];	//A
				int B=b[1];	//B
				int c=b[2];	//C
				int y=b[3]*100+b[4]*10+b[5];	//DEF
				int x=b[6]*100+b[7]*10+b[8];	//GHI
				if(a+(B*(x/c)+y)/x==10&&(B*x/c+y)%x==0&&x%c==0){
					return b;
				}
				return null;
		}
		//数组重组(全排列)
		public static void permute(int[] array,int start){
			if(start==array.length-1&&text(array)!=null){	//当start(数组指向的数为最后一个时),也就是可交换数到了最后一个
				System.out.print(++h+" "+Arrays.toString(text(array)));
				
				System.out.println();
			}
				for(int i=start;i<array.length;i++){
					swap(array,start,i);	//数组指向的数依次与后面每一个交换(遍历第一个数的所有可能位置)
					permute(array,start+1);
					swap(array,start,i);	//重置
				}
		}
		//交换
		public static void swap(int[] array,int start,int end){
				int t=array[start];
				array[start]=array[end];
				array[end]=t;
		}
	}


猜你喜欢

转载自blog.csdn.net/qq_42798905/article/details/87519601