蓝桥杯 预赛试题 神奇算式 java实现

来源:互联网 发布:mysql实现读写分离 编辑:程序博客网 时间:2024/05/18 06:21
标题:神奇算式由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。比如:210 x 6 = 1260 8 x 473 = 378427 x 81 = 2187 都符合要求。如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。
import java.util.Arrays;public class Main{static int vis[] = new int[10];static int bk[] = new int[10];public static void main(String[] args){int sum=0;for(int i=1023;i<=9876;i++){Arrays.fill(vis, 0);if(check(i)==0) continue;bk= Arrays.copyOf(vis, vis.length);for(int j=1;j<=98;j++){vis= Arrays.copyOf(bk, bk.length);if(i%j!=0)continue;int k=i/j;if(j>k)continue;if(check2(k,j)==0) continue;sum++;System.out.println(j+"*"+k+"="+i);}}System.out.println(sum);}//用于判断4个数字是否重复出现static int check(int x) {  do {    if(vis[x % 10] != 0) return 0;    vis[x%10]++;    x=x/10;  } while(x!=0);  return 1;}//k与j的每一位数字都不允许重复,而且必须是i中已经出现了的数字static int check2(int x,int y){do{if(vis[x%10]==0) return 0;//保证相同的数字只出现一次,为对y的判断做铺垫vis[x%10]--;    x=x/10;  }while(x!=0);do{if(vis[y%10]==0) return 0;vis[y%10]--;    y=y/10; }while(y!=0);return 1;}}

1 0
原创粉丝点击