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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

有四个数字 1,2,3,4,求 由他们组成的无重复四位数的具体数值和总个数  求大婶指教~

14 个回复

倒序浏览
想了一晚上  终于想出来了~非喜勿喷哈
public class Qiu {
        public static void main(String[] args) {
                int sum=0;
                for (int i = 1233; i < 4400; i++) {
                        int a = i / 1000;
                        int b = i / 100 % 10;
                        int c = i /10 % 10;
                        int d = i % 10;
                       
                        if (a + b + c + d == 10 && a*b*c*d==24) {
                        System.out.println("" + a + b + c + d);
                        sum+=1;
                        }
                }
                System.out.println(sum);
        }
}
回复 使用道具 举报
cat73 黑马帝 2016-8-25 08:41:20
藤椅
本帖最后由 cat73 于 2016-8-25 08:42 编辑

[Java] 纯文本查看 复制代码
public final class Main {
    public static void main(final String[] args) {
        Main.traverse(ArrayUtil.box("1234".toCharArray()), 0, chars -> Log.debug(new String(ArrayUtil.unBox(chars), 1, 3)));
    }

    /**
     * 遍历几个元素的所有可能的组合
     *
     * @param array 元素列表
     * @param index 请传 0
     * @param out 结果输出的接口
     */
    public static <T> void traverse(final T[] array, final int index, final TraverseOut<T> out) {
        if (index == array.length - 1) {
            out.invoke(array);
        } else {
            for (int index2 = index; index2 < array.length; index2++) {
                ArrayUtil.swap(array, index, index2);
                Main.traverse(array, index + 1, out);
                ArrayUtil.swap(array, index, index2);
            }
        }
    }

    /**
     * 遍历结果输出的接口
     *
     * @author cat73
     */
    @FunctionalInterface
    public static interface TraverseOut<T> {
        void invoke(T[] t);
    }
}


  1. [00:00:00] [DEBUG]: 1234
  2. [00:00:00] [DEBUG]: 1243
  3. [00:00:00] [DEBUG]: 1324
  4. [00:00:00] [DEBUG]: 1342
  5. [00:00:00] [DEBUG]: 1432
  6. [00:00:00] [DEBUG]: 1423
  7. [00:00:00] [DEBUG]: 2134
  8. [00:00:00] [DEBUG]: 2143
  9. [00:00:00] [DEBUG]: 2314
  10. [00:00:00] [DEBUG]: 2341
  11. [00:00:00] [DEBUG]: 2431
  12. [00:00:00] [DEBUG]: 2413
  13. [00:00:00] [DEBUG]: 3214
  14. [00:00:00] [DEBUG]: 3241
  15. [00:00:00] [DEBUG]: 3124
  16. [00:00:00] [DEBUG]: 3142
  17. [00:00:00] [DEBUG]: 3412
  18. [00:00:00] [DEBUG]: 3421
  19. [00:00:00] [DEBUG]: 4231
  20. [00:00:00] [DEBUG]: 4213
  21. [00:00:00] [DEBUG]: 4321
  22. [00:00:00] [DEBUG]: 4312
  23. [00:00:00] [DEBUG]: 4132
  24. [00:00:00] [DEBUG]: 4123
复制代码

点评

大哥 敢不敢挑战下用基础班前七天内容的知识做一个  发表于 2016-8-27 00:19
回复 使用道具 举报 1 0
悠悠呦呦 来自手机 中级黑马 2016-8-25 09:07:53
板凳
能组合到只用一个for循环吗
回复 使用道具 举报
悠悠呦呦 发表于 2016-8-25 09:07
能组合到只用一个for循环吗

是啊   他们说用一个循环做出来的才是老司机
回复 使用道具 举报
public static void main(String[] args) {                   int shu = 0;                 int count = 0;                 String s;                 for (int a = 1; a <= 4; a++)                 {                  for (int b = 1; b <= 4; b++)                  {                    for (int c = 1; c <= 4; c++)                    {                       for (int d = 1; d <= 4; d++)                   {                     // 打印出所有不重复的数字             if (a != b && a != c && a != d && b != c && b != d && c != d)                 {                     shu = a * 1000 + b * 100+ c * 10+ d;                     s = String.valueOf(shu);//将int类型的数转换成字符串                     // 4不能再第1位, "1"与"3"不能挨着  indexof是表示此数第一次出现的位置                if (s.indexOf("4") != 0&& s.indexOf("13") == -1 && s.indexOf("31") == -1)            {                      count++;              System.out.println(s);                }              }           }         }   }
回复 使用道具 举报
本帖最后由 水月灬清影 于 2016-8-30 21:26 编辑

[Java] 纯文本查看 复制代码
import java.util.Arrays;
public class Demo {
	public static void main(String[] args) {
		int count = 0;
		for (int i = 1234; i <= 4321; i++) {
			char[] num = Integer.toString(i).toCharArray();
			Arrays.sort(num);
			if (String.valueOf(num).equals("1234")) {
				System.out.println(i);
				count++;
			}
		}
		System.out.println("总计:" + count);
	}
}

点评

厉害 斯卡一~~  发表于 2016-8-30 21:44
回复 使用道具 举报 1 0
gohw007 发表于 2016-8-27 00:24
public static void main(String[] args) {                   int shu = 0;                 int count = 0;                 String s; ...

谢谢大神帮忙
回复 使用道具 举报
[AppleScript] 纯文本查看 复制代码
public class Demo59 {

	/**
	 * 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
	 * 思路:
	 * 123,124,132,134,142,143---->1*2*3*4=24
	 * a*100+b*10+c--->三重循环
	 * 
	 */
	public static void main(String[] args) {
		int count=0;
		for(int i = 1;i<5;i++){
			for(int j=1;j<5;j++){
				for(int k=1;k<5;k++){
					if(i!=k && k!=j && j!=i){
						System.out.print(i*100+j*10+k+"\t");
						count++;
						if(count%6==0){
							System.out.println();
						}
							
					}
				}
			}
		}
		System.out.println("能组成"+count+"个不重复且互不相同的三位数");
	}

}
回复 使用道具 举报
有人可以一个循环解决么??
回复 使用道具 举报
应该不是很难,楼上的大神们都写了,我就不多于了,哈哈
回复 使用道具 举报
梦想的小草 发表于 2016-9-2 21:56
应该不是很难,楼上的大神们都写了,我就不多于了,哈哈

  好吧
回复 使用道具 举报
送你一个递归算法,可以是任意字符,任意字符个数

public static void main(String[] args) {
        char[] arr = {'1','2','3','4'};
        pailie(arr,0);
}

public static void swap(char[] arr,int i,int j) {
        char c = arr[i];
        arr[i] = arr[j];
        arr[j] = c;
}

public static void pailie(char[] arr,int index) {
        if(index >= arr.length) {
                System.out.println(arr);
                return;
        }
       
        for(int i = index; i < arr.length; i++) {
                swap(arr,i,index);
                pailie(arr,index + 1);
                swap(arr,i,index);
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马