zoukankan      html  css  js  c++  java
  • 【剑指offer】设置在最小数目的阵列

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/28128551

    题目描写叙述:

    输入一个正整数数组,把数组里全部数字拼接起来排成一个数。打印能拼接出的全部数字中最小的一个。

    比如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

    输入:

    输入可能包括多个測试例子。
    对于每一个測试案例,输入的第一行为一个整数m (1<=m <=100)代表输入的正整数的个数。
    输入的第二行包括m个正整数,当中每一个正整数不超过10000000。

    输出:

    相应每一个測试案例,
    输出m个数字能排成的最小数字。

    例子输入:
    3
    23 13 6
    2
    23456 56
    例子输出:
    13236
    2345656
        这道题主要要自己定义一个比較组合后的数字的大小的规则,主要是对于数字m和n,先将其转化为字符串,而后比較其组合mn和nm的大小,这里直接依照字符串的大小标准来比較就可以,最后用qsort进行排序。排序后的字符串数组中的字符串从左向右组合起来的字符串即使最小的字符串,即转化为整数后为最小的整数。

        AC代码例如以下:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    char strs[100][10];
    
    /*
    自己定义比較规则
    */
    int mycompare(const void *str1,const void *str2)
    {
    	static char s1[20];
    	static char s2[20];
    	char *string1 = (char *)str1;
    	char *string2 = (char *)str2;
    	//将两个字符串合并在一起
    	sprintf(s1,"%s%s",string1,string2);
    	sprintf(s2,"%s%s",string2,string1);
    
    	return strcmp(s1,s2);
    }
    
    /*
    以字符串形式打印出最小的整数
    */
    void PrintMinNum(int *nums,int len)
    {
    	if(nums==NULL || len<1)
    		return;
    
    	int i;
    	//将整数写入到字符串中
    	for(i=0;i<len;i++)
    		sprintf(strs[i],"%d",nums[i]);
    
    	//依照mycompare中指定的规则排序
    	qsort(strs,len,10*sizeof(char),mycompare);
    	
    	for(i=0;i<len;i++)
    		printf("%s",strs[i]);
    	printf("
    ");
    }
    
    
    int main()
    {
    	int nums[100];
    	int m;
    	while(scanf("%d",&m) != EOF)
    	{
    		int i;
    		for(i=0;i<m;i++)	
    			scanf("%d",nums+i);
    
    		PrintMinNum(nums,m);
    	}
    
    	return 0;
    }
    
        
    /**************************************************************
        Problem: 1504
        User: mmc_maodun
        Language: C++
        Result: Accepted
        Time:240 ms
        Memory:1020 kb
    ****************************************************************/

  • 相关阅读:
    bzoj3196 Tyvj 1730 二逼平衡树
    bzoj2929 [Poi1999]洞穴攀行
    bzoj2325 [ZJOI2011]道馆之战
    cf413E Maze 2D
    bzoj2599 [IOI2011]Race
    bzoj1528 [POI2005]sam-Toy Cars
    UVA 796 Critical Links(无向图求桥)
    UVA 315 Network(无向图求割点)
    HDU 1269 迷宫城堡(求是否只有一个强连通分量)
    HDU 3974 Assign the task
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4590259.html
Copyright © 2011-2022 走看看