求助一个素数乘法竖式的软件题目

hyyongyuan 2014-09-25 10:22:21
下面的竖式表示, 图中的"*"号只能用素数2,3,5,7代替, 因此称为素数乘法竖式.

* * *

× * *

---------------

* * * *

* * * *

----------------

* * * * *




求大侠们帮帮!老师太缺德,出这么个问题,恶心呀!不知道用java怎么实现!代码怎么写?我问了好多java论坛都没有会的,有人说说思路也好呀!不甚感激哦!

好像以前有这么一个奥数题来这,可这是java编程。求大牛,请高手!
...全文
296 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghostkngiht 2014-09-29
  • 打赏
  • 举报
回复

List<Integer> list1 = new ArrayList<Integer>();
        int[] array = new int[]{2, 3, 5, 7};
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array.length; j++) {
                for (int k = 0; k < array.length; k++) {
                    list1.add(Integer.parseInt(array[i] + "" + array[j] + "" + array[k]));
                }
            }
        }
        List<Integer> list2 = new ArrayList<Integer>();
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array.length; j++) {
                list2.add(Integer.parseInt(array[i] + "" + array[j]));
            }
        }
        for (int i = 0; i < list1.size(); i++) {
            for (int j = 0; j < list2.size(); j++) {
                int v = list1.get(i) * list2.get(j);
                int v1 = list1.get(i) * (list2.get(j) % 10);
                int v2 = list1.get(i) * (list2.get(j) / 10);
                if (String.valueOf(v).matches("[2357]{5}") && String.valueOf(v1).matches("[2357]{4}") && String.valueOf(v2).matches("[2357]{4}")) {
                    System.out.println("   " + list1.get(i));
                    System.out.println("*   " + list2.get(j));
                    System.out.println("-----------");
                    System.out.println("  " + v2);
                    System.out.println(" " + v1);
                    System.out.println("-----------");
                    System.out.println(" " + v);
                }
            }
        }
haoyyy 2014-09-28
  • 打赏
  • 举报
回复
题目挺好的. 思路:应该满足以下条件:一个二位数,一个三位数,每一位都是素数.二位数的 个位/十位/以及本身 乘以三位数结果每位都是素数.写一个判断一个数字每一位都是素数的方法.穷举所有可能性,满足以上条件就可以了. 穷举的思路:最简单将 2,3,5,7 写成一个数组,然后套5个循环,把每种可能性给遍历出来,满足条件则输出. 另一种是递归来遍历:

int[] primes = new int{2,3,5,7};
int[] nums = new int[5];
//省略判断成功函数success();
//main 方法这么调用:solve(0);
private void solve(int depth){
	if(depth >= 5){
		if(success(nums)){
			System.out.println(Arrays.toString(nums));
		}
		return;
	}
	for(int p:primes){
		nums[depth] = p;
		solve( ++depth );
	}
}

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧