首页 > 试题广场 >

组个最小数 (20)

[编程题]组个最小数 (20)
  • 热度指数:19806 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:

给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。



现给定数字,请编写程序输出能够组成的最小的数。

输入描述:
每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空
格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。


输出描述:
在一行中输出能够组成的最小的数。
示例1

输入

2 2 0 0 0 3 0 0 1 0

输出

10015558
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a[] = new int[10];
        String x = "";
        for (int i = 0; i < 10; i++) {
            a[i] = sc.nextInt();
        }

        if (a[0] == 0) {
            for (int i = 1; i < 10; i++) {
                while (a[i] != 0) {
                    x = x + i;
                    a[i]--;
                }
            }
        }
        else
            {
                for(int i=1;i<10;i++)
                {
                    if(a[i]!=0)
                    {
                        x=x+i;
                        a[i]--;
                        break;
                    }
                }
                for(int i=0;i<10;i++)
                {
                    while(a[i]!=0)
                    {
                        x=x+i;
                        a[i]--;
                    }
                }
        }
        System.out.print(x);
    }
}


发表于 2021-05-17 20:09:14 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        int [] numcount=new int[10]; 
        StringBuilder sb=new StringBuilder();
        Scanner in=new Scanner(System.in);
        for(int i=0;i<numcount.length;i++){
            numcount[i]=in.nextInt();
        }
        for(int i=1;i<numcount.length;i++){
            if(numcount[i]!=0){
                sb.append(i);
                numcount[i]--;
                break;
            }
        }
        for(int i=0;i<numcount.length;i++){
            while(numcount[i]!=0){
                sb.append(i);
                numcount[i]--;
            }
        }
         System.out.print(sb);
    }
}
发表于 2021-01-31 16:08:47 回复(0)
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);


        int [] B = new int [10];

        for (int i=0;i<B.length;i++){
            int b = input.nextInt();
            B[i] = b;
        }

        int [] A_0 = new int [B[0]];
        int [] A_1 = new int [B[1]];
        int [] A_2 = new int [B[2]];
        int [] A_3 = new int [B[3]];
        int [] A_4 = new int [B[4]];
        int [] A_5 = new int [B[5]];
        int [] A_6 = new int [B[6]];
        int [] A_7 = new int [B[7]];
        int [] A_8 = new int [B[8]];
        int [] A_9 = new int [B[9]];

        for (int i=0;i<B[0];i++){
            A_0[i] = 0;
        }
        for (int i=0;i<B[1];i++){
            A_1[i] = 1;
        }
        for (int i=0;i<B[2];i++){
            A_2[i] = 2;
        }
        for (int i=0;i<B[3];i++){
            A_3[i] = 3;
        }
        for (int i=0;i<B[4];i++){
            A_4[i] = 4;
        }
        for (int i=0;i<B[5];i++){
            A_5[i] = 5;
        }
        for (int i=0;i<B[6];i++){
            A_6[i] = 6;
        }
        for (int i=0;i<B[7];i++){
            A_7[i] = 7;
        }
        for (int i=0;i<B[8];i++){
            A_8[i] = 8;
        }
        for (int i=0;i<B[9];i++){
            A_9[i] = 9;
        }

        int len = 0;
        for (int i = 0;i< B.length;i++){
            len = len + B[i];
        }

        int [] C = new int[len];

        System.arraycopy(A_0, 0, C, 0, B[0]);
        System.arraycopy(A_1, 0, C, 0+B[0], B[1]);
        System.arraycopy(A_2, 0, C, B[1]+B[0], B[2]);
        System.arraycopy(A_3, 0, C, B[1]+B[0]+B[2], B[3]);
        System.arraycopy(A_4, 0, C, B[1]+B[0]+B[2]+B[3], B[4]);
        System.arraycopy(A_5, 0, C, B[1]+B[0]+B[2]+B[3]+B[4], B[5]);
        System.arraycopy(A_6, 0, C, B[1]+B[0]+B[2]+B[3]+B[4]+B[5], B[6]);
        System.arraycopy(A_7, 0, C, B[1]+B[0]+B[2]+B[3]+B[4]+B[5]+B[6], B[7]);
        System.arraycopy(A_8, 0, C, B[1]+B[0]+B[2]+B[3]+B[4]+B[5]+B[6]+B[7], B[8]);
        System.arraycopy(A_9, 0, C, B[1]+B[0]+B[2]+B[3]+B[4]+B[5]+B[6]+B[7]+B[8], B[9]);


        Arrays.sort(C);
        for (int j=1;j<C.length;j++){
            if (C[0]==0){
                while(C[j]!=0&&C[0]==0){
                    C[0] = C[j];
                    C[j] = 0;break;
                }
            }
        }
        for (int i : C) {
            System.out.print(i+"");//输出所有的数据
        }
    }
}

发表于 2019-07-29 14:04:30 回复(0)
import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        //创建键盘输入
        Scanner scan = new Scanner(System.in);
        //定义数组接收键盘录入值,以下标进行区分
        int[] a = new int[10];
        //定义字符串用于加和并输出
        String sum = "";
        //定义计数器在第2个位置添加一个@
        int t = 1;
        //定义s对0进行存储
        String s = "";
        for (int i = 0; i < 10; i++) {
            a[i] = scan.nextInt();
        }
        scan.close();
        if(a[0] != 0) {
            for (int i = 0; i < a[0]; i++) {
                s += 0;
            }
        }
        //向字符串进行加和
        for (int i = 1; i < 10; i++) {
            for (int j = 0; j < a[i]; j++, t++) {
                if(t == 1) {
                    sum += i + "@";
                }else {
                    sum += i;
                }
            }
        }     //利用正则表达式进行替换
        System.out.println(sum.replaceAll("\\W", s));
    }
}

编辑于 2019-06-05 15:39:50 回复(0)
import java.util.Arrays;
import java.util.Scanner;
public class Main{
 public static void main(String[] args) {
  Scanner in=new Scanner(System.in);
  int []nn=new int[10];
  for(int i=0;i<10;i++) {
   nn[i]=in.nextInt();
  }
  String s="";
  for(int i=0;i<10;i++) {
   for(int j=0;j<nn[i];j++) {
    s+=i;
   }
  }
  char[]mm=s.toCharArray();
  int []pp=new int[mm.length];
  for(int i=0;i<mm.length;i++) {
   pp[i]=mm[i]-'0';
  }
  Arrays.sort(pp);
  int min=10;
  for(int i=0;i<pp.length;i++) {
   if(pp[i]<min&&pp[i]!=0) {
    min=pp[i];
    pp[i]=20;
   }
  }
  String p=""+min;
  for(int i=0;i<pp.length;i++) {
   if(pp[i]<10) {
    p+=pp[i];
   }
  }
  System.out.println(p);
 }
}


发表于 2019-03-12 18:51:31 回复(0)
//把所有0都插入第二个位置上,其他按顺序输出就可以了
import java.util.Scanner;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            ArrayList<Integer> al = new ArrayList<>();
            int[] nums = new int[10];
            for (int i = 0; i < 10; i++) {
                nums[i] = sc.nextInt();
            }
            for (int i = 1; i < 10; i++) {
                for (int j = 0; j < nums[i]; j++) {
                    al.add(i);
                }
            }
            System.out.print(al.get(0));
            for (int i = 0; i < nums[0]; i++) {
                System.out.print(0);
            }
            for (int i = 1; i < al.size(); i++) {
                System.out.print(al.get(i));
            }
            System.out.println();
        }
    }
}

发表于 2018-09-29 15:57:21 回复(0)
<pre>
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num[]=new int[10];
        for (int i = 0; i < 10; i++) 
            num[i]=in.nextInt();
        for (int i = 1; i < num.length; i++) {//0不能开头,我们要找除0之外最小的数,
            if (num[i]!=0) {
                num[i]--;//找到这个数,把它的个数减一
                System.out.print(i);
                break;
            }
        }
        int temp=0;
        while (true) {
            temp=print(num);
            if (temp==-1) 
                break;
            System.out.print(temp);
        }
    }
    public static int print(int num[]) {//这个方法实现方法类似,因为第一位的数已经找到,就无所顾忌,每次找最小的数就行了,如果都为0,返回-1
        for (int i = 0; i < num.length; i++) {
            if (num[i]!=0) {
                num[i]--;
                return i;
            }
        }
        return -1;
    }
}
</pre>
发表于 2018-05-16 14:56:02 回复(0)
//比较直观的方法
import java.util.*;
public class Main{
    public static void main(String[] args){
        List<Integer> data = newArrayList();
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            data.add(sc.nextInt());
        }
        StringBuilder sb = new StringBuilder();
        boolean hasZero = data.get(0)!=0;
        for(inti = 1;i<10;i++){
            if(hasZero&&data.get(i)!=0){//遇到首位为0的状况则在下一位的第一位后面添0则为最小。
                appendVal(sb,i,1);
                for(intk = 0;k<data.get(0);k++){
                   sb.append(0);
               }
                hasZero = false;
            appendVal(sb,i,data.get(i)-1);
            }else{
            appendVal(sb,i,data.get(i));
            }
        }
        System.out.println(sb.toString());
    }
     //填入对应位上的数值
    public static void appendVal(StringBuilder sb,int val,int count){
        if(sb!=null){
            for(inti = 0;i<count;i++){
                sb.append(val);
            }
        }
    }
 
}
发表于 2018-03-20 15:17:44 回复(0)
可以AC,可以A
import java.util.ArrayList;
import java.util.Scanner;

public class Main {     @SuppressWarnings("resource")     public static void main(String[] args) {         Scanner in = new Scanner(System.in);         int[] intArray = new int[10];// 这里面的10个数字,代表0-9分别有多少个         for (int i = 0; i < intArray.length; i++) {             intArray[i] = in.nextInt();         }         ArrayList<Integer> arrayList = new ArrayList<Integer>();// 建立一个集合,存放所有的数字         int i = 0;// 代表现在数到第几个数字上去了         while (i < 10) {             for (int j = 0; j < intArray[i]; j++) {                 arrayList.add(i);// 只要在这个循环内,就给我往上加             }             i++;         }         /*          * for (Integer integer : arrayList) { System.out.println(integer); }          */         Object[] array = arrayList.toArray();         for (int j = 0; j < array.length; j++) {             if (array[j] != array[0]&&Integer.valueOf(array[0].toString())==0) {                 Object t = array[j];                 array[j] = array[0];                 array[0] = t;                 break;             }         }         for (int j = 0; j < array.length; j++) {             System.out.print(array[j]);         }     }
}

发表于 2017-09-22 13:38:10 回复(0)
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class Main{
        public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		List<Integer> list = new LinkedList<Integer>();
		int get = 0;
		for(int i = 0;i<10;i++){
			get = sc.nextInt();
			for(int j=0;j<get;j++){
				list.add(i);
			}
		}
		Collections.sort(list);
		String tmp ="";
		boolean first = true;
		if(! list.contains(0)){
			for(int i=0;i<list.size();i++){
				System.out.print(list.get(i));
			}
		}else{
			for(int i=0;i<list.size();i++){
				if(list.get(i)==0){
					tmp+=list.get(i);
				}else if(list.get(i)!=0 && first){
					System.out.print(list.get(i));
					System.out.print(tmp);
					first = false;
				}else{
					System.out.print(list.get(i));
				}
			}
		}
	}
}

发表于 2017-08-14 22:58:16 回复(1)

import java.util.Scanner;

public class Main {
public static void main(String[] args) {
int arr[]=new int[10];
Scanner sc = new Scanner(System.in);
for(int i=0;i<arr.length;i++){
arr[i]=sc.nextInt();
}
int num=0;
int index =getFirstNum(arr);
if(index==0){
System.out.println("全他妈是0!!!");
return;
}
String str="";
str+=index;
arr[index]--;
for(int i=0;i<arr.length;i++){
while(arr[i]!=0){
str+=i;
arr[i]--;
}
}
System.out.println(str);
}
public static int getFirstNum(int arr[]){
for(int i =1;i<arr.length;i++){
if(arr[i]!=0){
return i;
}
}
return 0;
}
}

发表于 2017-04-06 11:00:45 回复(0)

import java.util.Scanner;

public class Main {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int[] nums = new int[10];

for(int i=0;i<nums.length;i++){

nums[i] = sc.nextInt();

}

String str ="";

for(int i= 1 ;i<nums.length;i++){

if(nums[i]>0){

str= str+i;

nums[i]--;

break;

}

}

for(int i=0;i<nums.length;i++){

if(nums[i]>0){

for(int j=1 ; j<=nums[i];j++){

str=str+i;

}

}

}

System.out.println(str);

}

}

发表于 2017-01-31 23:31:10 回复(0)
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
	    Scanner in = new Scanner(System.in);
	    int num[] = new int[10];
	    for(int i=0;i<10;i++){
	    	num[i] = in.nextInt();
	    }
	    int c[] = new int[50];
	    int count=0;
	    String str = "";
	    for(int i=0;i<10;i++){
	    	for(int j=0;j<num[i];j++){
	    		c[count] = i;
	    		count++;
	    	}
	    }
	    int temp = c[0];
	    c[0] = c[num[0]];
	    c[num[0]] = temp;
	    for(int i=0;i<count;i++){
	    	str = str + c[i];
	    }
	    System.out.println(str);
	}
}
插个旗
发表于 2016-11-27 20:02:04 回复(0)

问题信息

难度:
13条回答 19513浏览

热门推荐

通过挑战的用户