Arrange an Array to Form a Smallest Digit

描述: 

Question: 

Input an array of positive integers, arrange the integers to form new digits, and output the smallest digit among all the new ones. 

 

Input Example 1: 

{2, 1}

Output Example 1:

12

 

Input Example 2:

{32, 321}

Output Example 2:

32132

 

Input Example 3:

{4589, 101,41425,9999}

Output Example 3:

1014142545899999;

 

 

Interface: 

int  smallestDigit(int a[],int nCount,char * strRst)

Function: Arrange digits in the input array to form a smallest digit. 
Input: int a[]: an array of integers

int nCount: length of the array

char * strRst: returned value
Output: none
Return: o indicates success and -1 indicates exception. 



#include "oj.h"
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <iostream>  
#include <sstream>  
using namespace std;
// 功能:将输入的数组排成最小的数
// 输入: int a[]:整型数组
//        int nCount:数组长度
//        char * strRst 返回值
// 输出:
// 返回:成功返回0  异常返回-1

int myCompare(const void *str1 , const void *str2)
{
	char *s1 = new char[20]();
	char *s2 = new char[20]();
	strcpy(s1 , *(const char **)str1);
	strcat(s1 , *(const char **)str2);

	strcpy(s2 , *(const char **)str2);
	strcat(s2 , *(const char **)str1);
	int result = strcmp(s1 , s2);
	delete [] s1;
	delete [] s2;
	return result;
}

int  smallestDigit(int a[],int nCount,char * strRst)
{
	if(!a || nCount<=0)
		return -1;
	int i;
	char **strNumbers = (char **)(new int[nCount]());
	for(i=0; i<nCount; i++)  
	{  
		strNumbers[i] = new char[10]();
		sprintf(strNumbers[i] , "%d" , a[i]);
	}  
	qsort(strNumbers, nCount , sizeof(char *) , myCompare);

	for(i=0; i<nCount; i++)  
	{
		strcat(strRst , strNumbers[i]);
	}
	for(int i = 0 ; i < nCount ; i++)
		delete [] strNumbers[i];
	delete [] strNumbers; 
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值