2011国信蓝点杯全国软件设计大赛编程大题

/*
 * 看下面的算式:
 □□ x □□ = □□ x □□□
 它表示:两个两位数相乘等于一个两位数乘以一个三位数。
 如果没有限定条件,这样的例子很多。
 但目前的限定是:这9个方块,表示1~9的9个数字,不包含0。
 该算式中1至9的每个数字出现且只出现一次!
 比如:
 46 x 79 = 23 x 158
 54 x 69 = 27 x 138
 54 x 93 = 27 x 186
 .....
 请编程,输出所有可能的情况!
 注意:左边的两个乘数交换算同一方案,不要重复输出!
 要求考生把所有函数写在一个文件中。调试好后,存入与考生文件夹下对应题
 号的“解答.txt”中即可。
 相关的工程文件不要拷入。
 对于编程题目,要求选手给出的解答完全符合ANSI C标准,不能使用c++特性;
 不能使用诸如绘图、中断调用等硬件相关或操作系统相关的API。
 */

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MyTest11 {

 public static void play(int n, int[] array) {
 if (n == 9 && JudeEquation(array)) {
 System.out.print(array[0] + "" + array[1] + " * " + array[2] + ""
   + array[3] + " = " + array[4] + "" + array[5] + " * "
   + array[6] + "" + array[7] + "" + array[8]);// 格式化输出
   System.out.println();
   return;
  }
  for (int i = 1; i < 10; i++) {
   if (!JudeRepeat(array, i))
    continue;
   array[n] = i; // 赋值(1~9中的任意数字)
   play(n + 1, array);// 递归调用
   array[n] = 0;// 移除以选过的值
  }
 }

  // 判断重复,如已选过的值则返回false
  public static boolean JudeRepeat(int[] array, int value) {
      for (int j = 0; j < array.length; j++) {
  if (value == array[j])
   return false;
  }
  return true;
 }

          //判断等式,是否满足
 public static boolean JudeEquation(int array[]) {
  int a = Integer.parseInt(array[0] + "" + array[1]);
  int b = Integer.parseInt(array[2] + "" + array[3]);
  int c = Integer.parseInt(array[4] + "" + array[5]);
  int d = Integer.parseInt(array[6] + "" + array[7] + "" + array[8]);

  if (a * b != c * d || a < b) // a<b技巧(这样就去除重复的算式)
  return false;
           return true;
 }
 public static void main(String[] args) {
  int array[] = new int[9];
  play(0, array);
 }
}


 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值