给定数字0-9各若干个。你可以以任意顺序排列这些数字,但必须全部使用。目标是使得最后得到的数尽可能小(注意0不能做首位)。例如:
给定两个0,两个1,三个5,一个8,我们得到的最小的数就是10015558。
现给定数字,请编写程序输出能够组成的最小的数。
每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空
格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。
在一行中输出能够组成的最小的数。
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 s = new Scanner(System.in); int[] a = new int[10]; for(int i = 0;i <a.length;i++){ a[i] = s.nextInt(); } int j = 1; for(;j<a.length;j++) { if (a[j] != 0) { System.out.print(j); a[j] = a[j]-1; break; } } for(int k = 0;k <10;k++){ for(int m = 0;m<a[k];m++){ System.out.print(k); } } } }
public class Main{ public static void main(String[] args){ Scanner input =new Scanner(System.in); int[] num=new int[10]; for(int i=0;i<10;i++){ num[i]=input.nextInt(); } StringBuilder number=new StringBuilder(""); if(num[0]==0){//如果不含零,可直接拼接 for(int i=1;i<10;i++){ while(num[i]!=0){ number.append(i); num[i]--; } } }else{//如果含零,则需要找出最小的非零数放在首位,然后进行拼接 int pos=1;//定义第一个存在的非0数 while(num[pos]==0){ pos++;//找出其位置 } number.append(pos); num[pos]--; for(int i=0;i<10;i++){ while(num[i]!=0){ number.append(i); num[i]--; } } } System.out.print(number); } }
import java.util.*; 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<10;i++){ if(num[i]!=0){ System.out.print(i); num[i]--; break; } } while(num[0]!=0){ System.out.print(0); num[0]--; } for(int i=1;i<10;i++){ while(num[i]!=0){ System.out.print(i); num[i]--; } } } }
//把所有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(); } } }
已经按从小到大开始加入到数组中了,所以只要在查找过程中找到一个非零数弹出插入到第一位即为最小数
while True: try: digitList = list(map(int,input().split())) numList = [] getFirstNum = False for i in range(10): for j in range(digitList[i]): numList.append(i) if not getFirstNum and i != 0: numList.insert(0,numList.pop(-1)) getFirstNum = True print("".join(map(str,numList))) except Exception: break
思路:排序交换第一个不是0的数即可。 #include <iostream> #include <algorithm> #include <string> #include <fstream> using namespace std; #ifndef debug ifstream ifile("case.txt"); #define cin ifile #endif int main(){ int num; string rlt; for(int i=0; i<10; i++){ cin >> num; string tmp(num, '0' + i); rlt += tmp; } sort(rlt.begin(), rlt.end()); for (int i = 0; i < rlt.size(); i++) { if (rlt[i] != '0') { swap(rlt[0], rlt[i]); break; } } cout << rlt << endl; system("pause"); }
#include <stdio.h>
package smallNum; import java.util.Scanner; /** * * <h3><b> 输入描述: </b></h3> * 每个输入包含1个测试用例。每个测试用例在一行中给出10个非负整数,顺序表示我们拥有数字0、数字1、……数字9的个数。整数间用一个空 * * 格分隔。10个数字的总个数不超过50,且至少拥有1个非0的数字。 * * <h3><b> 输出描述: </b></h3> 在一行中输出能够组成的最小的数。 * <h3><b> 输入 </b></h3> * * <pre> * 2 2 0 0 0 3 0 0 1 0 * </pre> * * <h3><b> 输出 </b></h3> * * <pre> * 10015558 * </pre> * * @author hewhys * */ public class Main { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int[] i = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; StringBuffer sb = new StringBuffer(); // input for (int j = 0; j < i.length; j++) { i[j] = scan.nextInt(); } // output the first not-zero num to StringBuffer for (int j = 1; j < i.length; j++) { if (i[j] > 0) { sb.append(j); i[j]--; // delete the output one break; } } // output all the num to StringBuffer for (int j = 0; j < i.length; j++) { if (i[j] > 0) { for (int j2 = 0; j2 < i[j]; j2++) { sb.append(j); } } } // output the result System.out.println(sb.toString()); scan.close(); } }
import java.util.Scanner; public class Main23 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] a = new int[10]; a[0] = sc.nextInt(); a[1] = sc.nextInt(); a[2] = sc.nextInt(); a[3] = sc.nextInt(); a[4] = sc.nextInt(); a[5] = sc.nextInt(); a[6] = sc.nextInt(); a[7] = sc.nextInt(); a[8] = sc.nextInt(); a[9] = sc.nextInt(); int length=a[0]+a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7]+a[8]+a[9]; String b=""; if(a[0]!=0){ for(int i=1;i<=9;i++){ if(a[i]!=0){ b=i+""; a[i]=a[i]-1; break; } } } for(int i=0;i<=9;i++){ while(a[i]!=0){ b+=i+""; a[i]=a[i]-1; } } System.out.println(b); } }判断好有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]); } } }