zoukankan      html  css  js  c++  java
  • JZ-C-33

    剑指offer第三十三题:把数组排成最小的数

      1 //============================================================================
      2 // Name        : JZ-C-33.cpp
      3 // Author      : Laughing_Lz
      4 // Version     :
      5 // Copyright   : All Right Reserved
      6 // Description : 把数组排成最小的数
      7 //============================================================================
      8 
      9 #include <iostream>
     10 #include <string>
     11 #include "string.h"
     12 #include <algorithm>
     13 #include <stdio.h>
     14 using namespace std;
     15 
     16 int compare(const void* strNumber1, const void* strNumber2);
     17 
     18 // int型整数用十进制表示最多只有10位
     19 const int g_MaxNumberLength = 10;
     20 
     21 char* g_StrCombine1 = new char[g_MaxNumberLength * 2 + 1];
     22 char* g_StrCombine2 = new char[g_MaxNumberLength * 2 + 1];
     23 
     24 void PrintMinNumber(int* numbers, int length)
     25 {
     26     if(numbers == NULL || length <= 0)
     27         return;
     28 
     29     char** strNumbers = (char**)(new int[length]);
     30     for(int i = 0; i < length; ++i)
     31     {
     32         strNumbers[i] = new char[g_MaxNumberLength + 1];
     33         sprintf(strNumbers[i], "%d", numbers[i]);
     34     }
     35 
     36     qsort(strNumbers, length, sizeof(char*), compare);//从小到大排序,排序规则为compare函数★
     37 
     38     for(int i = 0; i < length; ++i)
     39         printf("%s", strNumbers[i]);
     40     printf("
    ");
     41 
     42     for(int i = 0; i < length; ++i)
     43         delete[] strNumbers[i];
     44     delete[] strNumbers;
     45 }
     46 
     47 // 如果[strNumber1][strNumber2] > [strNumber2][strNumber1], 返回值大于0
     48 // 如果[strNumber1][strNumber2] = [strNumber2][strNumber1], 返回值等于0
     49 // 如果[strNumber1][strNumber2] < [strNumber2][strNumber1], 返回值小于0
     50 int compare(const void* strNumber1, const void* strNumber2)//这里定义排序规则★
     51 {
     52     // [strNumber1][strNumber2]
     53     strcpy(g_StrCombine1, *(const char**)strNumber1);
     54     strcat(g_StrCombine1, *(const char**)strNumber2);
     55 
     56     // [strNumber2][strNumber1]
     57     strcpy(g_StrCombine2, *(const char**)strNumber2);
     58     strcat(g_StrCombine2, *(const char**)strNumber1);
     59 
     60     return strcmp(g_StrCombine1, g_StrCombine2);
     61 }
     62 
     63 // ====================测试代码====================
     64 void Test(char* testName, int* numbers, int length, char* expectedResult)
     65 {
     66     if(testName != NULL)
     67         printf("%s begins:
    ", testName);
     68 
     69     if(expectedResult != NULL)
     70         printf("Expected result is: 	%s
    ", expectedResult);
     71 
     72     printf("Actual result is: 	");
     73     PrintMinNumber(numbers, length);
     74 
     75     printf("
    ");
     76 }
     77 
     78 void Test1()
     79 {
     80     int numbers[] = {3, 5, 1, 4, 2};
     81     Test("Test1", numbers, sizeof(numbers)/sizeof(int), "12345");
     82 }
     83 
     84 void Test2()
     85 {
     86     int numbers[] = {3, 32, 321};
     87     Test("Test2", numbers, sizeof(numbers)/sizeof(int), "321323");
     88 }
     89 
     90 void Test3()
     91 {
     92     int numbers[] = {3, 323, 32123};
     93     Test("Test3", numbers, sizeof(numbers)/sizeof(int), "321233233");
     94 }
     95 
     96 void Test4()
     97 {
     98     int numbers[] = {1, 11, 111};
     99     Test("Test4", numbers, sizeof(numbers)/sizeof(int), "111111");
    100 }
    101 
    102 // 数组中只有一个数字
    103 void Test5()
    104 {
    105     int numbers[] = {321};
    106     Test("Test5", numbers, sizeof(numbers)/sizeof(int), "321");
    107 }
    108 
    109 void Test6()
    110 {
    111     Test("Test6", NULL, 0, "Don't print anything.");
    112 }
    113 
    114 
    115 int main(int argc, char** argv)
    116 {
    117     Test1();
    118     Test2();
    119     Test3();
    120     Test4();
    121     Test5();
    122     Test6();
    123 
    124     return 0;
    125 }
  • 相关阅读:
    别再乱升级 MySQL 驱动了。。
    Spring Boot + MyBatis + MySQL 实现读写分离
    多线程环境下,HashMap 为什么会出现死循环?
    亿级流量架构怎么做资源隔离?写得太好了!
    refdeveloptools for developers
    how to setup ppc2003 or smartphone 2003 to connect to internet
    转载:一篇java与C#的对比文章(英文)
    在sqlexpress中添加DB和在sql analyzer中操作DB.
    windows 2003下配置IIS6为iis5方式的隔离模式运行
    开源的pop3和smtp组件(支持中文及SSL)
  • 原文地址:https://www.cnblogs.com/Laughing-Lz/p/5604471.html
Copyright © 2011-2022 走看看