2 qq 32742637 qq_32742637 于 2016.03.23 11:56 提问

华为上机测试题,我只得了50分,为什么?

图片说明
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
void main()
{
char str[1024];
int num[1024] = {0};
scanf("%s", str);

for (int i = 0; i < strlen(str); i++)    //判断是否除了字母以外还有其他字符如果有则删去
{
    while (str[i]<'A' || str[i]>'z' )
    {
        for (int j = i; j < strlen(str); j++)
        {
            str[j] = str[j + 1];
        }
        if (str[i] == '\0')
        {
            break;
        }
    }
}
int i = 0;
while (str[i]!='\0')
{
    int count = 1;
    int j = i;
    while (str[j] == str[j + 1])
    {
        count++;
        j++;
    }
    num[i] = count;
    printf("%c", str[i]);
    printf("%d", num[i]);
    i += count;
}
//printf("%s", str);

system("pause");

}
图片说明

5个回答

tianyaleixiaowu
tianyaleixiaowu   2016.03.23 15:25
已采纳

以华为的结果看,给50分也是正常的,结果对,但离最优解还差的远。华为肯定会更看重逻辑思维、算法复杂度等等。这道题还是比较简单的,但是你用了一个三层for循环嵌套,下面又一个双while循环嵌套,算法复杂度飙到了N的3次方。
事实上完全可以用一个for就解决的问题,属于线性复杂度的问题。你的性能肯定相当之差。
我用java写了一个,单层循环解决的。你可以参考一下。
public class Test {
public static void main(String[] args) {
String s = "abbc65yyy&*ccc$b1baa00";
StringBuffer sb = new StringBuffer();
char[] array = s.toCharArray();
char temp = '0';
int nowCharCount = 1;
for (int i = 0; i < array.length; i++) {
char c = array[i];
if (isEnglish(c)) {
//如果刚才出现了字符c
if (temp == c) {
sb.deleteCharAt(sb.length() - 1);
sb.append(nowCharCount + 1);
nowCharCount++;
continue;
}
nowCharCount = 1;
temp = c;
sb.append(c);
sb.append(nowCharCount);
} else {
//初始化
nowCharCount = 1;
temp = '0';
}
}

    System.out.println(sb.toString());
}

private static boolean isEnglish(char c) {
    if ('a' <= c && c <= 'z') {
        return true;
    }
    return false;
}

}

qq_32742637
qq_32742637 回复天涯泪小武: 哈哈,我刚开始学C,谢啦,看来还是太年轻
一年多之前 回复
IT_163
IT_163   2016.03.23 14:28

这么复杂,都不想看
计算两个日期间的时间,你可以将两个日期转换为时间戳,然后相减,在转为天、小时
这样不是好点么

qq_32742637
qq_32742637 回复IT_163: 您说的我完全看不懂啊,您是不是看错图了![图片说明](http://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/001/face/0.gif)
一年多之前 回复
tianyaleixiaowu
tianyaleixiaowu   2016.03.23 15:26

卧槽,格式太乱了,截图看看吧图片说明

Royal_lr
Royal_lr   Ds   Rxr 2016.03.23 15:32

华为看重的不只是结果,,而是你的思维以及算法

qq_34672029
qq_34672029   2016.04.15 15:34

华为注重的是思维及算法过程,而不是最终的结果

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!