[华为机试练习题]29.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. 

练习阶段:

中级  

代码

/*---------------------------------------
*   日期:2015-07-01
*   作者:SJF0115
*   题目:Arrange an Array to Form a Smallest Digit 
*   来源:华为机试练习题
-----------------------------------------*/
#include <iostream>
#include <string.h>
#include <stdio.h>
#include "oj.h"
#include <algorithm>
using namespace std;
#define MAX 10

char* stra = new char[2*MAX+1];
char* strb = new char[2*MAX+1];

/**
C++标准库的sort算法的第三个参数是一个 < 判断,当使用自定义函数时,此函数的返回类型是bool类型,第一个参数小于第二个参数时返回真,否则返回假。
C中的qsort的第4个参数是一个返回值类型为int的函数,如果第一个参数小于第二个参数,返回负数;如果二者相等,返回0;否则返回正数。
C/C++中整数0表示假,非0(包括正数和负数)表示真。
不要混淆二者的使用方法,strcmp是一个C风格的比较函数,若要在sort中使用,需要包装成:
//参数类型修改为你要排序的数据的类型
bool cmp(char*a,char*b){
    return strcmp(a,b)<0;
}
**/
bool cmp(char* str1,char* str2){
    strcpy(stra,str1);
    strcat(stra,str2);
    strcpy(strb,str2);
    strcat(strb,str1);
    return strcmp(stra,strb) < 0;
}

// 功能:将输入的数组排成最小的数
// 输入: int a[]:整型数组
//        int nCount:数组长度
//        char * strRst 返回值
// 输出:
// 返回:成功返回0  异常返回-1

int  smallestDigit(int a[],int nCount,char * strRst){
    if(a == NULL || nCount <= 0 || strRst == NULL){
        return -1;
    }//if
    // 整型转换为字符
    char** strNumbers = (char**) (new char [nCount+1]);
    for(int i = 0;i < nCount;++i){
        strNumbers[i] = new char[10];
        sprintf(strNumbers[i],"%d",a[i]);
    }//for
    // 排序
    sort(strNumbers,strNumbers+nCount,cmp);
    //输出
    int index = 0;
    for(int i = 0;i < nCount;++i){
        int size = strlen(strNumbers[i]);
        for(int j = 0;j < size;++j){
            strRst[index++] = strNumbers[i][j];
        }//for
    }//for
    strRst[index] = '\0';
    return 1;
}

目录
相关文章
Leetcode Find Minimum in Rotated Sorted Array 题解
对一个有序数组翻转, 就是随机取前K个数,移动到数组的后面,然后让你找出最小的那个数,注意,K有可能是0,也就是没有翻转。
52 0
|
机器学习/深度学习 算法
CF1029A Many Equal Substrings(kmp!!!!最通俗易懂的文章模板)
CF1029A Many Equal Substrings(kmp!!!!最通俗易懂的文章模板)
58 0
LeetCode 389. Find the Difference
给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。
121 0
LeetCode 389. Find the Difference
|
算法
LeetCode Find Minimum in Rotated Sorted Array II
假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小的元素。 注意数组中可能存在重复的元素。
88 0
LeetCode Find Minimum in Rotated Sorted Array II
LeetCode 153. Find Minimum in Rotated Sorted Array
假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小的元素。 你可以假设数组中不存在重复元素。
109 0
LeetCode 153. Find Minimum in Rotated Sorted Array
LeetCode contest 200 5476. 找出数组游戏的赢家 Find the Winner of an Array Game
LeetCode contest 200 5476. 找出数组游戏的赢家 Find the Winner of an Array Game
HDOJ/HDU 1062 Text Reverse(字符串翻转~)
HDOJ/HDU 1062 Text Reverse(字符串翻转~)
117 0
LeetCode之Find the Difference
LeetCode之Find the Difference
124 0
下一篇
DataWorks