用java语言编程:有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

你好,打扰了,网上可以查到这个问题的答案,很不错。我现在想把这个实现用一个方法封装起来,方法有两个参数,一个int数组,一个生成的数字位数(比如三位数),不知道该怎么操作... 你好,打扰了,网上可以查到这个问题的答案,很不错。我现在想把这个实现用一个方法封装起来,方法有两个参数,一个int数组,一个生成的数字位数(比如三位数),不知道该怎么操作,麻烦了,能不能帮个忙,辛苦辛苦! 展开
 我来答
大雁南飞
2015-09-27 · 知道合伙人互联网行家
大雁南飞
知道合伙人互联网行家
采纳数:1660 获赞数:26106
编码爱好者

向TA提问 私信TA
展开全部
int i=0;  //保存百位上的数
int j=0;  //保存十位上的数
int k=0;  //保存各位上的数
int t=0;  //保存数字个数 
for(i=1;i<=4;i++){
   for(j=1;j<=4;j++){
   for(k=1;k<=4;k++){
if(i!=j && j!=k && i!=k){
     t+=1;
System.out.println(i*100+j*10+k);

     }  
   }
 }
System.out.println (t);
贠卓冉93
2012-03-24
知道答主
回答量:1
采纳率:0%
帮助的人:2.8万
展开全部
public class HundredNumber{
private int[] a={1, 2, 3, 4};//定义数组并赋值
private int num=0;//定义组成三位数的个数
private int hundredNum=0;//定义组成的三位数
//hundred-百位, tens-十位, units-个位
public int hundNumber(int hundred, int tens, int units){
return 100*hundred+10*tens+1*units;
}
public static void main(String[] args){
HundredNumber hn=new HundredNumber();
for(int i=0; i<4; i++){
for(int j=0; j<4; j++){
for(int m=0; m<4; m++){
if(hn.a[i]!=hn.a[j]&&hn.a[j]!=hn.a[m]&&hn.a[m]!=hn.a[i]){
hn.hundredNum=hn.hundNumber(hn.a[i], hn.a[j],hn.a[m]);
hn.num++;
System.out.println(hn.hundredNum);
}
}
}
}
System.out.println("Total: "+hn.num);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2017-12-28
展开全部
@Test
public void test(){
    int[] a = {1,2,3,4};
    int n = 3;
    //取出n位不同的数字,就能保证位置上不重复,
    //题目中没有限制n的大小,最好的方式用递归
    fun(0,new int[n],a);
}

/**
 *
 * @param x 当前的取第几位
 * @param a 取出n位数组
 * @param b 选取参数的数组(这里可以优化的,可以用list类里面去掉一个参数,那么递归的效率会提高)
 */
public void fun(int x,int[] a,int[] b){
  if(x<a.length){//设置跳出递归的条件
        for(int i=0;i<b.length;i++){
            int j=0;
            boolean f = true;
            while(j<x){
                if(a[j]==b[i]){
                    f=false;
                    break;
                }
                j++;
            }
            a[x]=b[i];
            if(f&&x==a.length-1){
                System.out.println(Arrays.toString(a));//输出所有的组合,也可以用一个参数接收,自己定义
            }else if(f){//如果不是最后一位,那么继续递归去取数
                fun(x+1,a,b);
            }
        }
    }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
skyover
2017-03-30 · TA获得超过258个赞
知道小有建树答主
回答量:158
采纳率:100%
帮助的人:90.3万
展开全部
            int[] array = { 1, 2, 3, 4 };
            List<int> result = new List<int>();
            foreach (int i in array)
            {
                int h = i * 100;
                foreach (int ii in array)
                {
                    if (ii != i)
                    {
                        int hh = h + ii * 10;
                        foreach (int iii in array)
                        {
                            if (iii != ii && iii != i) 
                            {
                                int hhhh = hh + iii;
                                result.Add(hhhh);
                            }
                        }
                    }
                }
            }
            textBox1.Text += "总数为:" + result.Count.ToString() + "\r\n各项值为:\r\n";
            foreach(int rs in result)
            {
                textBox1.Text += rs.ToString() + "\r\n";
            }

数学学得不好,所以不保证是最高效率的方法,另外,自己拖多行文本框进去。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tianxiawulang
2014-05-14 · TA获得超过2.7万个赞
知道大有可为答主
回答量:4732
采纳率:89%
帮助的人:2638万
展开全部

按题意,其实就是4取3的排列问题,共有24个数:

>> p=perms(1:4);
>> sum(p(:,1:3).*repmat([100 10 1],size(p,1),1),2)
ans =
   432
   431
   423
   421
   412
   413
   342
   341
   324
   321
   312
   314
   234
   231
   243
   241
   214
   213
   132
   134
   123
   124
   142
   143
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(14)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式