A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩伟 中级黑马   /  2012-7-23 17:19  /  1755 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 韩伟 于 2012-7-23 17:29 编辑

/**
* 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
*/
import java.util.*;
class ThreeUnitNum
{
static ArrayList al = new ArrayList();
public static void main(String []args)
{
  int [] arr = {1,2,3,4};
  createNum(arr);
  judgeNum();
  for(int i=0;i<al.size();i++)
   System.out.print(al.get(i)+"  ");
}

public static void createNum(int []arr)
{
  for(int i=0;i<arr.length;i++)
   for(int j=0;j<arr.length;j++)
    for(int k=0;k<arr.length;k++)
     al.add(arr*100+arr[j]*10+arr[k]);
}

public static void judgeNum()       //这个函数有问题,请问这里改怎么做,如果要用迭代器又该怎么做
{
  for(int i=0;i<al.size();i++)
  {
   int temp = Integer.parseInt(al.get(i).toString());
   if((temp%10==temp/100)||(temp%10==temp/10%10)||(temp/100==temp/10%10))
    al.remove(temp);   
  }
}
}

如果我再声明一个ArrayList的话可以解决这个问题,但是我感觉那不优化。还有一点儿就是,集合声明的是静态的,这样会不会不好,如何能优化一下。
求高手指点!

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
我觉得可以实现iterator
回复 使用道具 举报
本帖最后由 陈少文 于 2012-7-23 19:00 编辑

/*
* 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
  思路1.
        百为数有4个选择,不重复的话十位数就有3个选择,个位2个选择
           4*3*2=24位。
        可以得出个数
        思路2:百位可以从1到4,十位从1到4,个位从1到4,它们各不相等,就可以了
        因为,比喻百位数为1,十位,个位只能从2,3,4中进行选择。
*
* */
public class count {
        
        public static void main(String[] args)
        {
                   int n = 0;
                for(int i = 1; i <= 4; i++)
                    for(int j = 1; j <= 4; j++)
                        for(int k = 1; k <= 4; k++)
                            if(i != j && j != k && i != k && ++n != 0)
                                System.out.println("NO."+n+":"+i+""+j+""+k);
                System.out.println("共有:" + n + "种");

        }

}

结果如下所示:


评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
你的程序我没运行出来,,你没发现很麻烦么。。
看看我改进的。
  1. static ArrayList list=new ArrayList();
  2.         public static void main(String []args){
  3.                 int[] a={1,2,3,4};
  4.                 for(int i=a[0];i<=a.length;i++){
  5.                         for(int j=a[0];j<=a.length;j++){
  6.                                 for(int k=a[0];k<a.length;k++){
  7.                                         if(i==j){
  8.                                                 continue;
  9.                                         }
  10.                                         if(j==k){
  11.                                                 continue;
  12.                                         }
  13.                                         if(k==i){
  14.                                                 continue;
  15.                                         }
  16.                                         list.add(i*100+j*10+k);
  17.                                 }
  18.                         }
  19.                 }
  20.                 for(Object o:list){
  21.                         System.out.print(o+"\t");
  22.                 }
  23. }
复制代码
输出的貌似没错的说。
  1. 123        124        132        134        142        143        213        214        231        234        241        243        312        314        321        324        341        342        412        413        421        423        431        432
复制代码

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
这是个排列组合问题呀,要精通排列组合才可以
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马