Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 691|回复: 0

C语言趣味程序百例精解之JAVA实现(60)组成三个数

[复制链接]

该用户从未签到

发表于 2011-9-19 13:42:56 | 显示全部楼层 |阅读模式
C语言趣味程序百例精解之java实现(60)组成三个数 :
题目:
由1到9这九个数字组成三个3位数,要求成1:2:3的比例,数字不重复。


解法一:

**  
     * 60.分成三个数  
     */  
public class Test60{
  public static void main(String args[]){
   new Test60().devideIntoThree60();
}
    public void devideIntoThree60() {   
        int count = 0;   
        int n1, n2, n3;   
        for (int a = 1; a <= 9; a++)   
            for (int b = 1; b <= 9; b++)   
                for (int c = 1; c <= 9; c++)   
                    for (int d = 1; d <= 9; d++)   
                        for (int e = 1; e <= 9; e++)   
                            for (int f = 1; f <= 9; f++)   
                                for (int g = 1; g <= 9; g++)   
                                    for (int h = 1; h <= 9; h++)   
                                        for (int i = 1; i <= 9; i++)   
                                            if (a + b + c + d + e + f + g + h   
                                                    + i == 45  
                                                    && notEquls(new int[] { a,   
                                                            b, c, d, e, f, g,   
                                                            h, i })) {   
                                                n1 = a * 100 + b * 10 + c;   
                                                n2 = d * 100 + e * 10 + f;   
                                                n3 = g * 100 + h * 10 + i;   
  
                                                if (2 * n1 == n2   
                                                        && 3 * n1 == n3) {   
                                                    count++;   
                                                    System.out.print(" a=" + a);   
                                                    System.out.print(" b=" + b);   
                                                    System.out.print(" c=" + c);   
                                                    System.out.print(" d=" + d);   
                                                    System.out.print(" e=" + e);   
                                                    System.out.print(" f=" + f);   
                                                    System.out.print(" g=" + g);   
                                                    System.out.print(" h=" + h);   
                                                    System.out.println(" i="  
                                                            + i);   
                                                    System.out.println("n1="  
                                                            + n1 + " n2=" + n2   
                                                            + " n3=" + n3);   
                                                }   
                                            }   
        System.out.println("count=" + count);   
  
    }   
   /**  
     * 判断是否两两不相等  
     */  
    public boolean notEquls(int[] a) {   
        if (a == null || a.length == 0 || a.length == 1)   
            return true;   
        for (int i = 0; i < a.length; i++) {   
            for (int j = i; j < a.length; j++) {   
                if (a == a[j] && i != j) {   
                    // System.out.println("a[" + i + "]" + a + " a[" + j +   
                    // "]"   
                    // + a[j] + "---");   
                    return false;   
                }   
            }   
        }   
        return true;   
    }   
}
C:\bat>java   Test60
a=1 b=9 c=2 d=3 e=8 f=4 g=5 h=7 i=6
n1=192 n2=384 n3=576
a=2 b=1 c=9 d=4 e=3 f=8 g=6 h=5 i=7
n1=219 n2=438 n3=657
a=2 b=7 c=3 d=5 e=4 f=6 g=8 h=1 i=9
n1=273 n2=546 n3=819
a=3 b=2 c=7 d=6 e=5 f=4 g=9 h=8 i=1
n1=327 n2=654 n3=981
count=4
解法二
public class Test601{
  public static void main(String args[]){
     new Test601().OneTwoThree();
     }
   public void OneTwoThree(){
      int count=0;
      for(int m=123;m<=333;m++){
         
         if(ok(m,2*m,3*m)){
            System.out.printf("No%d:%d %d %d\n",++count,m,2*m,3*m);
         }
      }
   }
   public boolean ok(int a,int b,int c){
       int x[]=f(a);
       int y[]=f(b);
       int z[]=f(c);
       int w[]={x[0],x[1],x[2],y[0],y[1],y[2],z[0],z[1],z[2]};
      return notEquls(w);
    }
    public int[] f(int n){//求n的各位数字。
      int i=0;
     int a[]=new int[3];
     while(n!=0){
       a[i++]=n%10;
       n=n/10;
     }
     return a;
    }
     /**  
     * 判断是否两两不相等或有0
     */  
    public boolean notEquls(int[] a) {   
        if (a == null || a.length == 0 || a.length == 1)   
            return true;   
        for (int i = 0; i < a.length; i++) {   
               if(a==0) return false;
            for (int j = i; j < a.length; j++) {   
                if (a == a[j] && i != j) {   
                  
                    return false;   
                }   
            }   
        }   
        return true;   
    }   
}

运行结果:
C:\java>java Test601
No1:192 384 576
No2:219 438 657
No3:273 546 819
No4:327 654 981
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

GMT+8, 2025-1-10 22:52 , Processed in 0.355435 second(s), 47 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表