华为的最新的两道算法设计题

要求均用C语言实现

1.找出最大长度子字符串(只包含字母),打印并且返回长度。 例如 str = "abc123abcd234abcdefgha324adsdawqdasdaseqqwe345abchded",最大子字符串是

“adsdawqdasdaseqqwe”

 1 int findMaxSubstring(char* str)

 2 {

 3     int maxLength = 0;

 4     int maxStartIndex = 0;

 5     int curLength = 0;

 6     int curStartIndex = 0;

 7     bool isFind = 0;

 8     for(unsigned int i = 0;i<strlen(str);i++)

 9     {

10         if(str[i] >= 'a' && str[i] <= 'z')

11         {

12             if(isFind == 0)

13             {

14                 isFind = 1;

15                 curLength = 1;

16                 curStartIndex = i;

17             }

18             else

19             {

20                 curLength++;

21             }

22         }

23         else if (str[i] < 'a' || str[i] > 'z')

24         {

25            isFind = 0;

26            if(curLength > maxLength)

27            {

28               maxLength = curLength;

29               maxStartIndex = curStartIndex;

30               curLength = 0;

31            }

32         }

33     }

34     char *p = NULL;

35     p = &str[maxStartIndex];

36     while(*p >= 'a' && *p <= 'z')

37     {

38         putchar(*p);

39         p++;

40     }

41     return maxLength;

42 }

 

2. 一个四位数,如1024,1004,打印出他们的中文形式,如果一千零二十四,一千零四

 这题因为限定了4位数,所以只考虑了4位数的情况,吃点分享一个大小写转换的源码,里面有不限位数的情况,当时调试的很痛苦,思想差不多。

void iConvert(int digit)

{

    char a[5][10] = {"","","","",""};

    char b[11][10] = {"","","","","","","","","","",""};

    char result[50] = {'\0'};

    int A[4] = {};

    for(int i=3;i>=0;i--)

    {

        A[i] = digit % 10;

        digit = int(digit/10);

    }

    printf("%d,%d,%d,%d\n",A[0],A[1],A[2],A[3]);

    int foundZero = 0;

    for(int i = 0 ;i<4;i++)

    {

        if(A[i]>0)

        {

            strcat(result,b[A[i]]);

            strcat(result,a[i]);

        }

        if(A[i]==0 && foundZero == 0)

        {

           if(i!=3)//如果不是最后一位,则不追加零

           {

             strcat(result,a[4]);

             foundZero = 1;

           }

        }    

    }

    puts(result);

}

运行结果:
华为的最新的两道算法设计题

 

你可能感兴趣的:(算法)