字符串替换空格(多换一) 和 一个智力题 字符串替换空格(多

「这是我参与11月更文挑战的第26天,活动详情查看:2021最后一次更文挑战

字符串替换空格(多换一)

面试题:

image-20210910180703837

面试题需要考虑规范,算法,代码,可移植性,还有鲁棒性等,考虑了这些之后再下手就会很舒服

首先我看到是%20替换空格,万一面试官说换其他的然后你很快的改了出来这也是一种本事,所以函数是必不可缺的,也最好有人机交互的样子,反正他有没有说写死.

代码

这里时间复杂度也是O(n),鲁棒性也不错,基本是可以拿下offer的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
c复制代码#include<stdio.h>
#include<assert.h>
#include<string.h>
char* replace(char* parr, const char* e1, const char* e2)
{
assert(e1 && e2);
char arr2[100] = { 0 };//创建一个数组用来存改变后的字符串
unsigned int len = strlen(parr);
unsigned int len1 = strlen(e1);
unsigned int len2 = strlen(e2);
int i = 0;//用来跟踪parr
int j = 0;//用来跟踪arr2
int z = 0;//用来跟踪e2
for (i = 0; i < len; i++)
{
if (parr[i] != *e1)
{
arr2[j++] = *(parr+i);
}
else
{
for (z = 0; z < len2; z++)
{
arr2[j++] = *(e2 + z);
}
}
}
return arr2;
}


int main()
{
char arr[100] = { 0 };//给足空间
while (1)
{
printf("请输入原字符串:>");
gets(arr);
printf("改变后的字符串为:>%s\n", replace(arr, " ", "%20"));
}
return 0;
}

结果

image-20210910203357973

称球次数寻球

题目:13 个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球?

题前分析:

人家把题目设计好的一般肯定3次找到是最少的次数,如果还有其他的那就不是智力题了,题目最重要的还是球的个数,球的个数决定几次找到那个不一样的球,所以又是咱们最爱的找规律(只有一个不一样重的)

一个球

image-20210910221920871

两个球

image-20210910222400352

三个球

这就是最少球数,最小实验就可以进行了

第一次

运气好一次就好

第二次

直接出结果

image-20210910224340864

四个球

到了这里实际上多多少少也可以看出来了

image-20210910232732693

五个球

从这里就开始组合球了,运气好,一次成

第一次运气好直接找到

image-20210910234912828

规律,(第一次找错了,浪费了好久,直接看看有没有数学规律吧)

下面都是数学规律来奠基,大家就不要怀疑了,我尝试过自己找,到头来到最后错了,下面的都改了

十二个球

第一次

第一次同 就是小意思直接顺延给你看看

image-20210913191056502

真正漂亮之处是第一次不同之处

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%