【剑指offer】设置在最小数目的阵列

【剑指offer】设置在最小数目的阵列

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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

题目描写叙述:

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

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

输入:

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

输出:

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

例子输入:
323 13 6223456 56
例子输出:
132362345656

    这道题主要要自己定义一个比較组合后的数字的大小的规则,主要是对于数字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("\n");
}


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
****************************************************************/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117802.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 增强for循环的语法_增强for循环原理

    增强for循环的语法_增强for循环原理一、概述:也成为【foreach】循环,是JDK1.5版本以后出来的一个高级for循环,专门用来遍历数组和集合的,它的内部原理其实就是iterator迭代器,所以在遍历过程中,不能对集合的元素进行增删操作。二、格式for(元素的数据类型变量名:数组名/集合名{}三、代码演示publicstaticvoidmain(String[]args)…

    2022年10月28日
    0
  • Kafka 是什么?

    Kafka 是什么?前言本文隶属于专栏《1000个问题搞定大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!本专栏目录结构和参考文献请见1000个问题搞定大数据技术体系正文Kafka的诞生背景2011年年初,美国领英公司(Linkedin)开源了一款基础架构软件,以奥地利作家弗兰兹・卡夫卡(FranzKafka)的名字命名。之后Linkedin将其贡献给Apache基金会,随后该软件于2012年10月成功完成孵化并顺利晋升为Apache

    2022年10月13日
    0
  • TraCI4Matlab的安装教程「建议收藏」

    TraCI4Matlab的安装使用教程安装1、下载安装Sumo2、下载安装TraCI4Matlab3、设置环境变量4、添加traci4matlab.jar路径5、将javaclasspath.txt复制至Matlab路径中6、配置Matlab路径安装Matlab有联合Sumo的插件traci4Matlab,网上还没有中文版的安装教程,走过的弯路,后来研究者尽可能少走。1、下载安装Sumo百度搜索sumo,点击进入官网,如图1:根据自己电脑系统进行下载:软件占的空间较少,按照提示安装完成即可:2

    2022年4月12日
    66
  • curl抓取页面时遇到重定向的解决方法

    curl抓取页面时遇到重定向的解决方法

    2022年2月10日
    51
  • getComputedStyle与currentStyle[通俗易懂]

    getComputedStyle与currentStyle[通俗易懂]本文参考https://developer.mozilla.org/en-US/docs/Web/API/Window.getComputedStyle1.简介  getComputedStyle是window下的一个全局函数,可以获取元素真正使用的样式。2.语法  varstyle=window.getComputedStyle(element[,ps

    2022年7月14日
    16
  • 【Anconda】关于安装Anaconda3各种各样的问题,吐血总结!!!(failed to create anacoda menu!!++)「建议收藏」

    【Anconda】关于安装Anaconda3各种各样的问题,吐血总结!!!(failed to create anacoda menu!!++)「建议收藏」昨天总结了装python和pycharm。本来想着马上接着总结Anaconda的,谁知道,这一安装,竟然花了我一天一夜的时间,(悲伤辣么大啊简直)。遇到了各种各样的问题,重装20几遍,每次问题都不同还。(掩面悲伤)直到刚才总算是可以了。面对问题的时候第一想法就是百度,结果尝试了所有百度的方法仍然无法解决问题。还是自己太笨了。总之,还是把自己遇到的问题总结一下把,以防不…

    2022年6月2日
    84

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号