avatar
红米手机如何?# PDA - 掌中宝
h*e
1
估计要过好久才有机会面试人,就上一道我以前喜欢出的题目吧。
题意非常简单,不到一分钟就可以解释清楚,但是一次完全做对不
多见。主要是考写code的能力,而且一般不限制用什么编程语言,
让面试的人可以自由发挥,多少都能写出一些code。这样评估时就
不是简单的0/1关系。
题目:给定两个有效的表示版本号的任意长的字符串,例如"3.0",
"1.2.3","5.01","4.99.6"等,比较哪一个字符串表示的版本号高。
用的是一般公认的比较原则,上边的例子中
5.01 > 4.99.6 > 3.0 > 1.2.3。
avatar
g*g
2
RT
avatar
N*t
3
囧,忽然意识到我基本不跟猫们说话,除了叫大毛名字,“坏猫”,“乖猫”或者“谢
谢”因为她整天叼着东西送给我。不跟小毛说话因为他木有反应 -_-
倒是经常跟他们对叫,猫叫一声我叫一声
不知道啊,就是心里觉得怪怪的,过不去那个坎。你们都说吗,我觉得我该反省了。。
avatar
t*2
4
就看看股票,微信,偶尔上个网玩个小游戏。不root不刷机。
够流畅么?一个月70M流量够么?
avatar
p*2
5

先split,然后一个一个比较?

【在 h****e 的大作中提到】
: 估计要过好久才有机会面试人,就上一道我以前喜欢出的题目吧。
: 题意非常简单,不到一分钟就可以解释清楚,但是一次完全做对不
: 多见。主要是考写code的能力,而且一般不限制用什么编程语言,
: 让面试的人可以自由发挥,多少都能写出一些code。这样评估时就
: 不是简单的0/1关系。
: 题目:给定两个有效的表示版本号的任意长的字符串,例如"3.0",
: "1.2.3","5.01","4.99.6"等,比较哪一个字符串表示的版本号高。
: 用的是一般公认的比较原则,上边的例子中
: 5.01 > 4.99.6 > 3.0 > 1.2.3。

avatar
y*l
6
我想跟他说,不过他不理我,会闲我烦走开,或者闭眼继续睡去。
他只在想出去玩的时候才会跟我交流两句~~~~
avatar
m*s
7
美国怎么能买到么?

【在 t****2 的大作中提到】
: 就看看股票,微信,偶尔上个网玩个小游戏。不root不刷机。
: 够流畅么?一个月70M流量够么?

avatar
h*e
8
差不多百分百的都是说要这么做的,但是差别就在于能不能写出来,
被指出bug以后能不能改过来。

【在 p*****2 的大作中提到】
:
: 先split,然后一个一个比较?

avatar
Y*Y
9
一直都说,就当人一样对待,广东话,普通话,英文,猫叫,狗叫,一起上
avatar
t*2
10
没人知道?国内父母想要个智能手机
avatar
b*m
11
嗯,其实这种题更实用,比一些花哨的算法题强多了。其它类似合并两个已排序的数组
(或者链表)、在行和列都已排序的二维数组中查找一个数的位置等等,都是很不错的
题。
avatar
d*1
12
如果她愿意叼东西给你,你可不可以训练fetch。
我想训练我们家那位。但是她基本不叼东西。
叼东西的目的就是甩出去。
我们家的好像已经会打滚了(听命令)。我什么时候找她做的好视频放到网上来。

【在 N******t 的大作中提到】
: 囧,忽然意识到我基本不跟猫们说话,除了叫大毛名字,“坏猫”,“乖猫”或者“谢
: 谢”因为她整天叼着东西送给我。不跟小毛说话因为他木有反应 -_-
: 倒是经常跟他们对叫,猫叫一声我叫一声
: 不知道啊,就是心里觉得怪怪的,过不去那个坎。你们都说吗,我觉得我该反省了。。

avatar
M*e
13
I bought one for my dad. So far so good.
I like miui's SMS, photo and app sync functions.
It supports China Mobil 3G/2G. Only 2G network for unicom users

【在 t****2 的大作中提到】
: 没人知道?国内父母想要个智能手机
avatar
l*c
14
我想用个recursion,string碰到最后或是碰到".",取之前的部分转成int比较,有大小
了就返回,没有大小了就recursion到下一部分。
avatar
A*a
15
说啊。要不然他怎么知道你想要干什么呢。
avatar
S*s
16
你手够快呀,加钱了么?

【在 M****e 的大作中提到】
: I bought one for my dad. So far so good.
: I like miui's SMS, photo and app sync functions.
: It supports China Mobil 3G/2G. Only 2G network for unicom users

avatar
b*m
17
不过碰到这种题我真想用Perl来实现,简直简单透了。:-)
avatar
m*u
18
说的,还一问一答的,虽然我说人话米线说猫语,基本上沟通没有问题。跟包子就不行
,互相听不懂,不过还是说。
avatar
z*5
19
性能够了。流量要看用的多不多了
avatar
R*y
20
C#里可以直接把string转换成Version类型,然后直接比吧... C++不知道有没有
想到个无关的,以前总有题目问string是不是valid的整数,或者这个string是不是
valid的版本号等等,能不能直接
try
{ new Version("1.2.3");}
catch
(return false;}
return true;
???

【在 h****e 的大作中提到】
: 估计要过好久才有机会面试人,就上一道我以前喜欢出的题目吧。
: 题意非常简单,不到一分钟就可以解释清楚,但是一次完全做对不
: 多见。主要是考写code的能力,而且一般不限制用什么编程语言,
: 让面试的人可以自由发挥,多少都能写出一些code。这样评估时就
: 不是简单的0/1关系。
: 题目:给定两个有效的表示版本号的任意长的字符串,例如"3.0",
: "1.2.3","5.01","4.99.6"等,比较哪一个字符串表示的版本号高。
: 用的是一般公认的比较原则,上边的例子中
: 5.01 > 4.99.6 > 3.0 > 1.2.3。

avatar
N*t
21

试过,不行啊
而且我不舍得扔她给我送来的东西啊,她会伤心的~

【在 d******1 的大作中提到】
: 如果她愿意叼东西给你,你可不可以训练fetch。
: 我想训练我们家那位。但是她基本不叼东西。
: 叼东西的目的就是甩出去。
: 我们家的好像已经会打滚了(听命令)。我什么时候找她做的好视频放到网上来。

avatar
M*e
22
nope. got it last week:D

【在 S*******s 的大作中提到】
: 你手够快呀,加钱了么?
avatar
p*2
23
好久没写了。刚才写了一个练练。大牛给指点一下。
class Version implements Comparable
{
private String version;

private String[] getNumbers(String ver)
{
return ver.split("\\.");
}

public Version(String _version)
{
version=_version;
}

public String getVersion()
{
return version;
}

public int compareTo(Version v)
{
String[] arr1=getNumbers(version);
String[] arr2=getNumbers(v.getVersion());

int i=0;
while(i{
int num1=Integer.parseInt(arr1[i]);
int num2=Integer.parseInt(arr2[i]);
if(num1!=num2)
return num1-num2;

i++;
}

if(arr1.length==arr2.length)
return 0;
else
return arr1.length-arr2.length;
}
}
avatar
N*t
24

我不想让她干啥啊。。。叫名字就过来,说坏猫就停止干坏事,好像也没别的了。。
我是说,比如跟猫倾诉啊,跟她讲自己的一天啊,之类的

【在 A***a 的大作中提到】
: 说啊。要不然他怎么知道你想要干什么呢。
avatar
d*a
25
太强了
求代买

【在 M****e 的大作中提到】
: nope. got it last week:D
avatar
h*e
26
可以用Perl之类的scripting language解这道题,但是只要是想把
每一个部分当作整数处理的话就会有一些微妙的bug。这里不用考虑
无效的输入的问题,也不用考虑int overflow的问题。我一般是看到
code写完以后,给出一个例子指出bug的存在。
C#的Version class好象只支持最多含4个部分的版本,题目要求的
是任意长度的,例如"1.2.3.4.5",所以就不能直接用了。
http://msdn.microsoft.com/en-us/library/system.version.aspx
avatar
d*1
27
你们家的太sensitive了。

【在 N******t 的大作中提到】
:
: 我不想让她干啥啊。。。叫名字就过来,说坏猫就停止干坏事,好像也没别的了。。
: 我是说,比如跟猫倾诉啊,跟她讲自己的一天啊,之类的

avatar
a*g
28
请问是在淘宝上买的么?还是去移动的实体店?也想给老妈买一个。。。
avatar
h*e
29
二爷做得好快。不过至少有两个问题。例如下面的两组版本比较
你的程序给出的结果不对:
1.60 > 1.7
1.2.3 > 1.2

【在 p*****2 的大作中提到】
: 好久没写了。刚才写了一个练练。大牛给指点一下。
: class Version implements Comparable
: {
: private String version;
:
: private String[] getNumbers(String ver)
: {
: return ver.split("\\.");
: }
:

avatar
N*y
30
你居然不和他们说话,这个实在太令人意外啦。
我也是当他们小孩一般,逮到机会就说个不停啊。
avatar
l*i
31
做成vector再比较?
s1="1.2.3"
s2="19.28.10.18"
// return: version comparison
// -1 if s1 < s2,
// 0 if s1 == s2
// 1 if s1 > s2
int version_cmp(string s1, string s2)
{
vector v1, v2;
for(int i=0; iint p = i;
for(; i;
string sub = s1.substr(p, i-p);
v1.push_back(atoi(sub.c_str()));
}
for(int i=0; iint p = i;
for(; i;
string sub = s2.substr(p, i-p);
v1.push_back(atoi(sub.c_str()));
}
for(int i=0; iif (v1[i] != v2[i]) return v1[i] - v2[i];
}
return v1.size() - v2.size();
}
avatar
l*o
32
我经常和艾迪说:
戆戆! 傻了吧~
笨!
等一下
你妈我要上班去了, 自己在家里乖~
自己玩去~
别激动!瞎激动!
臭臭,臭不拉叽的!
过来让我蹂躏下~
乖,睡觉去

【在 N******t 的大作中提到】
: 囧,忽然意识到我基本不跟猫们说话,除了叫大毛名字,“坏猫”,“乖猫”或者“谢
: 谢”因为她整天叼着东西送给我。不跟小毛说话因为他木有反应 -_-
: 倒是经常跟他们对叫,猫叫一声我叫一声
: 不知道啊,就是心里觉得怪怪的,过不去那个坎。你们都说吗,我觉得我该反省了。。

avatar
p*2
33

update 了一下。第一个问题要转成int,第二个问题我想错了,我想的是String的比较
了。越短越大,实际上是越短应该越小。再帮我看看,多谢。

【在 h****e 的大作中提到】
: 二爷做得好快。不过至少有两个问题。例如下面的两组版本比较
: 你的程序给出的结果不对:
: 1.60 > 1.7
: 1.2.3 > 1.2

avatar
A*a
34
哦,我不会向他倾诉我自己的事。但是会絮絮叨叨说和他有关的事情,比如为什么你这
么傻乎乎的呀?这么没心没废啊。你的眼睛有眼屎了。你臭烘烘的。你到那个地方去干
什么啊?你如果再去那里,不要怪我不客气哦。我给你挠痒痒吧。

【在 N******t 的大作中提到】
:
: 我不想让她干啥啊。。。叫名字就过来,说坏猫就停止干坏事,好像也没别的了。。
: 我是说,比如跟猫倾诉啊,跟她讲自己的一天啊,之类的

avatar
b*m
35
这题的确有点意思。不过1.60和1.7到底应该哪个大呀?

【在 h****e 的大作中提到】
: 二爷做得好快。不过至少有两个问题。例如下面的两组版本比较
: 你的程序给出的结果不对:
: 1.60 > 1.7
: 1.2.3 > 1.2

avatar
N*t
36

惭愧啊
该说啥捏。。?

【在 N*****y 的大作中提到】
: 你居然不和他们说话,这个实在太令人意外啦。
: 我也是当他们小孩一般,逮到机会就说个不停啊。

avatar
p*2
37

LZ是对的。应该1.60大。因为60>7。

【在 b***m 的大作中提到】
: 这题的确有点意思。不过1.60和1.7到底应该哪个大呀?
avatar
N*t
38

都能听的懂吗,我一直觉得要简单并且每次都一样的话他们才听的懂
是不是太低估人家的智商了

【在 l*****o 的大作中提到】
: 我经常和艾迪说:
: 戆戆! 傻了吧~
: 笨!
: 等一下
: 你妈我要上班去了, 自己在家里乖~
: 自己玩去~
: 别激动!瞎激动!
: 臭臭,臭不拉叽的!
: 过来让我蹂躏下~
: 乖,睡觉去

avatar
d*x
39
1.60大啊。
有个著名的笑话。某开源软件就是不出1.0版本,总是在0.9.x晃悠
后来终于出到了0.9.9,大家想这回你没办法了吧
作者嘿嘿一笑,放出0.9.10版本

【在 b***m 的大作中提到】
: 这题的确有点意思。不过1.60和1.7到底应该哪个大呀?
avatar
a*y
40
狗可能在想,这人怎么这么多话?

【在 A***a 的大作中提到】
: 哦,我不会向他倾诉我自己的事。但是会絮絮叨叨说和他有关的事情,比如为什么你这
: 么傻乎乎的呀?这么没心没废啊。你的眼睛有眼屎了。你臭烘烘的。你到那个地方去干
: 什么啊?你如果再去那里,不要怪我不客气哦。我给你挠痒痒吧。

avatar
b*m
41
嗯,我没注意你的代码,只是确认一下。

【在 p*****2 的大作中提到】
:
: LZ是对的。应该1.60大。因为60>7。

avatar
m*O
42
说啊,但都比较形而上,比如“你谁啊?”“你怎么在这儿啊?”
“你想干什么啊?”

【在 N******t 的大作中提到】
: 囧,忽然意识到我基本不跟猫们说话,除了叫大毛名字,“坏猫”,“乖猫”或者“谢
: 谢”因为她整天叼着东西送给我。不跟小毛说话因为他木有反应 -_-
: 倒是经常跟他们对叫,猫叫一声我叫一声
: 不知道啊,就是心里觉得怪怪的,过不去那个坎。你们都说吗,我觉得我该反省了。。

avatar
b*m
43
我擦,这下所有人都疯了。

【在 d**********x 的大作中提到】
: 1.60大啊。
: 有个著名的笑话。某开源软件就是不出1.0版本,总是在0.9.x晃悠
: 后来终于出到了0.9.9,大家想这回你没办法了吧
: 作者嘿嘿一笑,放出0.9.10版本

avatar
N*t
44

哦,呵呵 跟我pp差不多,她在的时候经常我以为她跟我说话,一看在跟猫说话,我很
佩服
恩,从现在开始多说

【在 A***a 的大作中提到】
: 哦,我不会向他倾诉我自己的事。但是会絮絮叨叨说和他有关的事情,比如为什么你这
: 么傻乎乎的呀?这么没心没废啊。你的眼睛有眼屎了。你臭烘烘的。你到那个地方去干
: 什么啊?你如果再去那里,不要怪我不客气哦。我给你挠痒痒吧。

avatar
w*x
45

const char* getNum(const char* q, int& res)
{
const char* p = q;
if (NULL == p) return NULL;
res = 0;
while (*p != '.' && *p != 0)
res = 10*res + *p++ - '0';
if (*p == '.') p++;
return p;
}
bool lessThan(const char* str1, const char* str2)
{
if (NULL == str1 || NULL == str2)
return false;
const char* p1 = str1;
const char* p2 = str2;
while (*p1 != 0 && *p2 != 0)
{
int x,y;
p1 = getNum(p1, x);
p2 = getNum(p2, y);
if (x < y) return true;
if (x > y) return false;
}
return *p1 == 0 && *p2 != 0;
}

【在 h****e 的大作中提到】
: 二爷做得好快。不过至少有两个问题。例如下面的两组版本比较
: 你的程序给出的结果不对:
: 1.60 > 1.7
: 1.2.3 > 1.2

avatar
m*O
46
lol
nod nod
“你谁啊?”
“。。。”
“你怎么老在饭盆儿这儿趴着啊”
“~~喵~~”
“你是不是想吃饼干啊?”
“喵!”

【在 m**u 的大作中提到】
: 说的,还一问一答的,虽然我说人话米线说猫语,基本上沟通没有问题。跟包子就不行
: ,互相听不懂,不过还是说。

avatar
l*c
47
写的蠢了点,但是也算是个思路吧,面试官
int compareVersion(string s1, int index1, string s2, int index2) {
//if s1 is larger, return 1, if s2 is larger return 2, else return 0
if (index1 < s1.size() && index2 < s2.size()) {
int tmpIndex1 = index1;
int prev1 = 0;
while (tmpIndex1 < s1.size()&&s1[tmpIndex1]!='.') {
int cur = (int)(s1[tmpIndex1] - '0');
prev1 = prev1*10 + cur;
tmpIndex1++;
}
int prev2 = 0;
int tmpIndex2 = index2;
while (tmpIndex2 < s2.size()&&s2[tmpIndex2]!='.') {
int cur = (int)(s2[tmpIndex2] - '0');
prev2 = prev2*10 + cur;
tmpIndex2++;
}
if (prev1 > prev2) return 1;
else if (prev1 < prev2) return 2;
else return compareVersion(s1, tmpIndex1+1, s2, tmpIndex2+1);
}
else if (index1 < s1.size()) {
int tmpIndex1 = index1;
int prev1 = 0;
while (tmpIndex1 < s1.size()&&s1[tmpIndex1]!='.') {
int cur = (int)(s1[tmpIndex1] - '0');
prev1 = prev1*10 + cur;
tmpIndex1++;
}
if (prev1>0) return 1;
else return 0;
}
else if (index2 < s2.size()) {
int tmpIndex2 = index2;
int prev2 = 0;
while (tmpIndex2 < s2.size()&&s2[tmpIndex2]!='.') {
int cur = (int)(s2[tmpIndex2] - '0');
prev2 = prev2*10 + cur;
tmpIndex2++;
}
if (prev2>0) return 2;
else return 0;
}
else return 0;
}
avatar
m*O
48
这个啊,是不是太俗了,猫大人不爱听?

【在 N******t 的大作中提到】
:
: 哦,呵呵 跟我pp差不多,她在的时候经常我以为她跟我说话,一看在跟猫说话,我很
: 佩服
: 恩,从现在开始多说

avatar
h*e
49
二爷和lanti同学(除去typo外)的代码就剩下一个比较tricky的bug了:
1.2 > 1.05
但是两位给出的是1.2 < 1.05。假设你们同意这是一个bug,下面就是
怎么fix的问题了。
avatar
m*O
50
hehe, nod nod

【在 A***a 的大作中提到】
: 哦,我不会向他倾诉我自己的事。但是会絮絮叨叨说和他有关的事情,比如为什么你这
: 么傻乎乎的呀?这么没心没废啊。你的眼睛有眼屎了。你臭烘烘的。你到那个地方去干
: 什么啊?你如果再去那里,不要怪我不客气哦。我给你挠痒痒吧。

avatar
p*2
51

我开始晕了。这个规律还没想太明白。

【在 h****e 的大作中提到】
: 二爷和lanti同学(除去typo外)的代码就剩下一个比较tricky的bug了:
: 1.2 > 1.05
: 但是两位给出的是1.2 < 1.05。假设你们同意这是一个bug,下面就是
: 怎么fix的问题了。

avatar
z*i
52

最好玩的是,周六我一个人带我的#4和#5去见vet
因为不是一个collony的,所以一前一后
小的在前面叫
大的在后面叫
不管哪个叫,叫一声我应一声“哎——”
开始两个都吓得发抖
后来估计是嫌我太罗嗦,都不说话了
感觉类似于小孩子坐车:Are we there yet?
快到的时候,小的又开始叫,不过是要求蹭我的手
都放松了。我觉得一问一答,其实虽然互相听不懂,但是听语气,还是能感觉到是好事
还是坏事的
周日,小子被爸爸训,结果小的耳朵扁的那个飞机头喂,很好玩,好像在骂她一样。她
姐就超镇定D!习以为常了
avatar
y*g
53
直接比数字大小吧?
leading 0不影响

【在 p*****2 的大作中提到】
:
: 我开始晕了。这个规律还没想太明白。

avatar
N*y
54
Cereal你来啦,找妈妈玩啊?(如果他过来找我)
cereal妈妈出去接爸爸啦~~你在家乖乖的啊。(cereal蹲门口目送我)
cereal不许出来!(我回家开门的时候)
cereal爸爸回家啦,快给爸爸摸摸 (丫就躺地方等按摩)
cereal你来陪妈妈做饭啦?你怎么又来讨垃圾玩啊?(丫一般此刻抱着我大腿叫唤)
cereal呢?cereal呢?吃好了饭怎么不过来玩啊?我一边说一边拍手,他一般就过来了。
还有各种以cereal开头的自说自话。。。。

【在 N******t 的大作中提到】
:
: 哦,呵呵 跟我pp差不多,她在的时候经常我以为她跟我说话,一看在跟猫说话,我很
: 佩服
: 恩,从现在开始多说

avatar
p*2
55

他是说1.2>1.05
直接比大小的话5>2

【在 y*******g 的大作中提到】
: 直接比数字大小吧?
: leading 0不影响

avatar
l*o
56
不准备让她听懂啊,命令都是用英语说的,那个我都保持一致,中文的就是自己随口乱
说的,不过时间长了估计她也能明白几句。

【在 N******t 的大作中提到】
:
: 哦,呵呵 跟我pp差不多,她在的时候经常我以为她跟我说话,一看在跟猫说话,我很
: 佩服
: 恩,从现在开始多说

avatar
l*c
57
yangcheng是说直接比较'.'后面的数字大小

【在 p*****2 的大作中提到】
:
: 他是说1.2>1.05
: 直接比大小的话5>2

avatar
A*R
58
常和猫对话,要么喵要么说人话,外人可能以为神经病了,呵呵
avatar
l*c
59
还是觉得recursion简单。就是我之前的代码需要安装lz最后的解释再改一下。
avatar
C*K
60
全和貓說中文.
大約兩種情況
1.
幹什麼你? ......
咪咪你是我最愛的貓~~ .......
咪咪進來~ .......
2.
怎麼了呀, 恩? (喵嗚)
咪咪過來! 不要動! 怎麼這麼髒?? (喵嗚)
咪咪, 太晚了不能出去. 不行! (喵嗚喵嗚)
不要叫嘛... 我抱一下嘛.... (喵嗚喵嗚喵嗚)
avatar
p*2
61

1.60 > 1.7

【在 l****c 的大作中提到】
: yangcheng是说直接比较'.'后面的数字大小
avatar
j*u
62
这个帖子看了让人心情特别好。
avatar
l*c
63
lz的意思是1.7更大?

【在 p*****2 的大作中提到】
:
: 1.60 > 1.7

avatar
N*t
64

re...
那我再问个问题啊,你们跟猫说话的时候,是正常的说,还是baby talk,就是像哄小
孩那样的?我发现女vet都特别会baby talk,我也特别不擅长这个,无地自容

【在 j***u 的大作中提到】
: 这个帖子看了让人心情特别好。
avatar
p*2
65
我觉得得clarify规则。
我不太理解为什么2>05, 60>7
好像一个按照string来处理,一个按照int来处理的
avatar
m*u
66
我是哄小孩那种语气说话的,貌似猫对这种语气接受度比较高。

【在 N******t 的大作中提到】
:
: re...
: 那我再问个问题啊,你们跟猫说话的时候,是正常的说,还是baby talk,就是像哄小
: 孩那样的?我发现女vet都特别会baby talk,我也特别不擅长这个,无地自容

avatar
y*g
67
那只能leading 0特殊处理了。
有leading 0的时候补齐成一样长, 2和05变成20 和 05 然后比数字。
02 和 035同理

【在 p*****2 的大作中提到】
: 我觉得得clarify规则。
: 我不太理解为什么2>05, 60>7
: 好像一个按照string来处理,一个按照int来处理的

avatar
N*t
68

猫对不同的声音的确反应不一样啊
我对猫爹说,猫不理你是因为你声音频率太低了,然后他现在都捏着嗓子像唱戏那样叫
猫 lol

【在 m**u 的大作中提到】
: 我是哄小孩那种语气说话的,貌似猫对这种语气接受度比较高。
avatar
w*x
69

按字符串比就行了吧

【在 y*******g 的大作中提到】
: 那只能leading 0特殊处理了。
: 有leading 0的时候补齐成一样长, 2和05变成20 和 05 然后比数字。
: 02 和 035同理

avatar
p*o
70
我是经常跟猫对叫。。。它一声我一声。。。
avatar
R*y
71
假设已经split好了,比较中间a和b的大小
int countZero(string s)
{
int count = 0;
for (int i = 0; i < s.length(); i++)
{
if (s[i] != '0') return count;
count ++;
}
}
bool isBigger(string a, string b)
{
if (countZero(a) < countZero(b)) return true;
if (countZero(a) > countZero(b)) return false;
return Int(a) > Int(b);
}
avatar
k*i
72
恩,我也仅限于这种程度

【在 A***a 的大作中提到】
: 哦,我不会向他倾诉我自己的事。但是会絮絮叨叨说和他有关的事情,比如为什么你这
: 么傻乎乎的呀?这么没心没废啊。你的眼睛有眼屎了。你臭烘烘的。你到那个地方去干
: 什么啊?你如果再去那里,不要怪我不客气哦。我给你挠痒痒吧。

avatar
R*y
73
或者还是可以用C#偷懒。我印象里Versoin类型,超过四位的后面自动忽略。所以用个
loop比较,相等的情况下,看字串里是否含点。不含,相等。含,取第一个点以后的字
串,转换成Version类型继续比。
avatar
p*k
74
i talk to D a lot, and trust me, he talks back.
i also tried to talk to
mimi, but she seems not emjoying. i am still testing in what degree she can
understand me

【在 d******1 的大作中提到】
: 如果她愿意叼东西给你,你可不可以训练fetch。
: 我想训练我们家那位。但是她基本不叼东西。
: 叼东西的目的就是甩出去。
: 我们家的好像已经会打滚了(听命令)。我什么时候找她做的好视频放到网上来。

avatar
R*y
75
.00和.000,我的code会显示前者比后者大。这个按照规则应该怎么说?

【在 R********y 的大作中提到】
: 假设已经split好了,比较中间a和b的大小
: int countZero(string s)
: {
: int count = 0;
: for (int i = 0; i < s.length(); i++)
: {
: if (s[i] != '0') return count;
: count ++;
: }
: }

avatar
y*a
76
天天说,基本是宝啊贝啊心啊肝啊等等肉麻s人不偿命的话
avatar
b*y
77
这是要找出最大的一个数还是要排序阿?

【在 h****e 的大作中提到】
: 估计要过好久才有机会面试人,就上一道我以前喜欢出的题目吧。
: 题意非常简单,不到一分钟就可以解释清楚,但是一次完全做对不
: 多见。主要是考写code的能力,而且一般不限制用什么编程语言,
: 让面试的人可以自由发挥,多少都能写出一些code。这样评估时就
: 不是简单的0/1关系。
: 题目:给定两个有效的表示版本号的任意长的字符串,例如"3.0",
: "1.2.3","5.01","4.99.6"等,比较哪一个字符串表示的版本号高。
: 用的是一般公认的比较原则,上边的例子中
: 5.01 > 4.99.6 > 3.0 > 1.2.3。

avatar
z*i
78
baby talk,高频率确实容易被接受
所谓叫baby talk是有原因的。小孩子就是容易分辨到这个高频率的,低频率他们不容
易接收到
大概pet也一样
等到用命令或训斥就改低沉的,他们一听就害怕了
avatar
h*e
79
我认为
1.60 > 1.7
1.2 > 1.05
单纯只考虑第一个小数点以后的数字就不能给出正确的解法。
另外还要支持多个小数点的情况,例如1.2.0和1.05,这时候.2.0
并不是一个有效的数字,不能和.05直接比较。
因此本题的关键是看出每个部分之间不是纯粹的string或者int比较,
需要使用类似Runkuraqay给出的数零或者补零的解法。
在实际面试时,我都会给出一定的提示和解释。最后和面试者的感叹
就是写这样一个小小的版本比较的程序都会有隐藏挺深的bug。
还有我不会纠结1.2和1.2.0到底谁大谁小的问题,不要搞得大家
都很累。:)
avatar
N*t
80

我也是。。。觉得在说她能听懂的话,能对叫好久lol

【在 p********o 的大作中提到】
: 我是经常跟猫对叫。。。它一声我一声。。。
avatar
b*y
81
这个规则好复杂啊
1.60,1.05和1.2中至少有一个是不合格的输入吧。。。
不然1.1000算啥?
1.1000
1.999
1.1
1.0001
要咋排序?
avatar
c*e
82
天天说,能听懂很多啊,还是bilingual:P
avatar
l*a
83
就两个排什么序?

【在 b*******y 的大作中提到】
: 这个规则好复杂啊
: 1.60,1.05和1.2中至少有一个是不合格的输入吧。。。
: 不然1.1000算啥?
: 1.1000
: 1.999
: 1.1
: 1.0001
: 要咋排序?

avatar
s*i
84
哈哈哈

【在 N******t 的大作中提到】
:
: 我也是。。。觉得在说她能听懂的话,能对叫好久lol

avatar
h*e
85
用小一些的数字大小关系就会更明显一些:
1.10 > 1.9 > 1.1 > 1.05 > 1.0.1 > 1.0

【在 b*******y 的大作中提到】
: 这个规则好复杂啊
: 1.60,1.05和1.2中至少有一个是不合格的输入吧。。。
: 不然1.1000算啥?
: 1.1000
: 1.999
: 1.1
: 1.0001
: 要咋排序?

avatar
A*4
86
我有天总算是悟了,小白训练我FETCH很成功

我们家那位。但是她基本不叼东西。

【在 d******1 的大作中提到】
: 如果她愿意叼东西给你,你可不可以训练fetch。
: 我想训练我们家那位。但是她基本不叼东西。
: 叼东西的目的就是甩出去。
: 我们家的好像已经会打滚了(听命令)。我什么时候找她做的好视频放到网上来。

avatar
b*y
87
回帖不爬楼啊。。。明明是3个

【在 l*****a 的大作中提到】
: 就两个排什么序?
avatar
g*4
88
太有爱了真是!
avatar
h*n
89
for the first section, compare integers
for the rest, compare floating numbers.
0.01
0.99
0
0.2

【在 h****e 的大作中提到】
: 估计要过好久才有机会面试人,就上一道我以前喜欢出的题目吧。
: 题意非常简单,不到一分钟就可以解释清楚,但是一次完全做对不
: 多见。主要是考写code的能力,而且一般不限制用什么编程语言,
: 让面试的人可以自由发挥,多少都能写出一些code。这样评估时就
: 不是简单的0/1关系。
: 题目:给定两个有效的表示版本号的任意长的字符串,例如"3.0",
: "1.2.3","5.01","4.99.6"等,比较哪一个字符串表示的版本号高。
: 用的是一般公认的比较原则,上边的例子中
: 5.01 > 4.99.6 > 3.0 > 1.2.3。

avatar
n*v
90
我经常和虎头说:
屁屁好臭啊!
妈妈好爱你啊!
好好呆在家里啊!
可爱的。。。一般是我望着他花痴的时候
来,让妈妈给。。。比方剪指甲
好好趴着,妈妈带你上楼。。。他爱趴在我肩上呼噜,每当我上楼的时候,顺便把他
扛上去
虎头好乖啊
快去喝点水
。。。。。。。。很多很多,就把他当个小朋友,和小孩说的话都可以和他说啊,不停说。
avatar
C*U
91
s.split(`.`)
haha

【在 h****e 的大作中提到】
: 差不多百分百的都是说要这么做的,但是差别就在于能不能写出来,
: 被指出bug以后能不能改过来。

avatar
j*t
92
我也每天都跟他们说话,但两只猫猫反映不一样。土豆好像能听懂,对着他说完一句,
他还经常会喵一声来回答。南瓜就不会这样,但会跑过来蹭你的手。
avatar
g*e
93
int getNum(char **s){
if(**s == '\0')
return 0;
int val=0;
while(**s != '.' && **s != '\0'){
val = val*10 + (**s)-'0';
(*s)++;
}
return val;
};
int compareVersion( char * s1, char * s2){
if(*s1 == '\0' && *s2 == '\0')
return 0;
if(*s1 == '.')
s1++;
if(*s2 == '.')
s2++;
int a = getNum(&s1);
int b = getNum(&s2);
printf("comparing %d and %d\n", a, b);
if(a > b)
return 1;
else if(a < b)
return -1;
else{
return compareVersion(s1, s2);
}
};
avatar
d*c
94
我经常出门的时候跟Danny说,宝贝儿,妈咪给你挣狗粮去了啊
但出门以后就自责,跟小时候我爸骗我的说法一样。。

【在 N******t 的大作中提到】
: 囧,忽然意识到我基本不跟猫们说话,除了叫大毛名字,“坏猫”,“乖猫”或者“谢
: 谢”因为她整天叼着东西送给我。不跟小毛说话因为他木有反应 -_-
: 倒是经常跟他们对叫,猫叫一声我叫一声
: 不知道啊,就是心里觉得怪怪的,过不去那个坎。你们都说吗,我觉得我该反省了。。

avatar
g*e
95
fix after the leading zero issue
int getNum(char **s, int &leadZeros){
if(**s == '\0')
return 0;
int val=0;
bool lead=true;
leadZeros=0;
while(**s != '.' && **s != '\0'){
if(lead && **s == '0')
leadZeros++;
else
lead = false;
val = val*10 + (**s)-'0';
(*s)++;
}
return val;
};
int compareVersion( char * s1, char * s2){
if(*s1 == '\0' && *s2 == '\0')
return 0;
if(*s1 == '.')
s1++;
if(*s2 == '.')
s2++;
int leada, leadb;
int a = getNum(&s1, leada);
int b = getNum(&s2, leadb);
a = a*leadb;
b = b*leada;
if(a > b)
return 1;
else if(a < b)
return -1;
else{
return compareVersion(s1, s2);
}
};
avatar
D*3
96
说阿,不过只有在她要吃的时候,我说一句,她回一句,我叫她,她也会喵一声然后跑
过来。。
avatar
l*8
97
1.2 怎么会比 1.05大?
1.2 > 1.0.5 倒是真的。
你的意思是 1.05 相当于1.0.5 ?

【在 h****e 的大作中提到】
: 我认为
: 1.60 > 1.7
: 1.2 > 1.05
: 单纯只考虑第一个小数点以后的数字就不能给出正确的解法。
: 另外还要支持多个小数点的情况,例如1.2.0和1.05,这时候.2.0
: 并不是一个有效的数字,不能和.05直接比较。
: 因此本题的关键是看出每个部分之间不是纯粹的string或者int比较,
: 需要使用类似Runkuraqay给出的数零或者补零的解法。
: 在实际面试时,我都会给出一定的提示和解释。最后和面试者的感叹
: 就是写这样一个小小的版本比较的程序都会有隐藏挺深的bug。

avatar
m*g
98
猫打哈欠的时候我会配音。。。

【在 N******t 的大作中提到】
: 囧,忽然意识到我基本不跟猫们说话,除了叫大毛名字,“坏猫”,“乖猫”或者“谢
: 谢”因为她整天叼着东西送给我。不跟小毛说话因为他木有反应 -_-
: 倒是经常跟他们对叫,猫叫一声我叫一声
: 不知道啊,就是心里觉得怪怪的,过不去那个坎。你们都说吗,我觉得我该反省了。。

avatar
g*e
99

1.2当然比1.05大啊
1.05 > 1.0.5

【在 l*********8 的大作中提到】
: 1.2 怎么会比 1.05大?
: 1.2 > 1.0.5 倒是真的。
: 你的意思是 1.05 相当于1.0.5 ?

avatar
yo
100
每天都要跟小猫说话,吃饭了睡觉了回家了这些琐事,不过说不出英文来,也喵不出来
,感觉我还是有点语言障碍,倒是他总能清晰地用各种语调说出“ma”字。。。
avatar
S*g
101
你所说的bug,其实就是看面试者是不是能考虑全你所谓的一般公认原则
你要是真把这些原则全都明明白白写下来,看还有几个人会错
这个题也就是在考回字有几个写法

【在 h****e 的大作中提到】
: 估计要过好久才有机会面试人,就上一道我以前喜欢出的题目吧。
: 题意非常简单,不到一分钟就可以解释清楚,但是一次完全做对不
: 多见。主要是考写code的能力,而且一般不限制用什么编程语言,
: 让面试的人可以自由发挥,多少都能写出一些code。这样评估时就
: 不是简单的0/1关系。
: 题目:给定两个有效的表示版本号的任意长的字符串,例如"3.0",
: "1.2.3","5.01","4.99.6"等,比较哪一个字符串表示的版本号高。
: 用的是一般公认的比较原则,上边的例子中
: 5.01 > 4.99.6 > 3.0 > 1.2.3。

avatar
m*O
102
lmao

【在 A*******4 的大作中提到】
: 我有天总算是悟了,小白训练我FETCH很成功
:
: 我们家那位。但是她基本不叼东西。

avatar
b*y
103
public int Compare(String s1, String s2)
{
String[] a1 = s1.Split('.');
String[] a2 = s2.Split('.');
int i=0;
while(i{
ss1=a1[i];
ss2 = a2[i];

int num1 =integer.parseInt(ss1);
int num2 = integer.parseInt(ss2);
if(num1==0 || num2 ==0)
return num1-num2;
while(ss1.charAt(0)=='0')
{
ss1 = ss1.subString(1);
num2 *=10;
}
while(ss2.charAt(0)=='0')
{
ss2 = ss2.subString(1);
num1 *=10;
}
if(num1!=num2)
return num1-num2;
i++
}
if(a1.Length == a2.Length)
return 0;
else
return a1.Length-a2.Length;
}

【在 h****e 的大作中提到】
: 用小一些的数字大小关系就会更明显一些:
: 1.10 > 1.9 > 1.1 > 1.05 > 1.0.1 > 1.0

avatar
y*n
104
说很多,比跟老公说话多多了。。。

【在 N******t 的大作中提到】
: 囧,忽然意识到我基本不跟猫们说话,除了叫大毛名字,“坏猫”,“乖猫”或者“谢
: 谢”因为她整天叼着东西送给我。不跟小毛说话因为他木有反应 -_-
: 倒是经常跟他们对叫,猫叫一声我叫一声
: 不知道啊,就是心里觉得怪怪的,过不去那个坎。你们都说吗,我觉得我该反省了。。

avatar
l*8
105
我跟peking2一样不能理解
1.60 > 1.7
1.2 > 1.05
我这样理解:
1.05 < 1.2是因为
1.05 < 1.06 < 1.07 < ....... < 1.18 < 1.19 < 1.20 ,而1.20把末尾的0省去就变成
1.2
但如果末尾的0可以省去, 1.60 就等同于 1.6, 就应该比1.7小。

【在 h****e 的大作中提到】
: 我认为
: 1.60 > 1.7
: 1.2 > 1.05
: 单纯只考虑第一个小数点以后的数字就不能给出正确的解法。
: 另外还要支持多个小数点的情况,例如1.2.0和1.05,这时候.2.0
: 并不是一个有效的数字,不能和.05直接比较。
: 因此本题的关键是看出每个部分之间不是纯粹的string或者int比较,
: 需要使用类似Runkuraqay给出的数零或者补零的解法。
: 在实际面试时,我都会给出一定的提示和解释。最后和面试者的感叹
: 就是写这样一个小小的版本比较的程序都会有隐藏挺深的bug。

avatar
A*R
106
lol,这也是俺每天早上和猫的告别词

【在 d****c 的大作中提到】
: 我经常出门的时候跟Danny说,宝贝儿,妈咪给你挣狗粮去了啊
: 但出门以后就自责,跟小时候我爸骗我的说法一样。。

avatar
b*y
107
我理解题目了
看这个例子
这样解读
1.十〉 1.九 〉 1.一 〉1.零点五 > 1.零.一 >1.零
10是指10
05是指0.5
然后从左边比到右边
avatar
N*t
108

lol!!!

【在 m*******g 的大作中提到】
: 猫打哈欠的时候我会配音。。。
avatar
b*y
109
反正俺是看了半小时才明白规则
面试遇到可以直接跪了
avatar
m*f
110
跟猫咪都是: come come come....
跟狗狗都是: go go go....
avatar
w*x
111
我觉得这题如果用其它语言来做必须拒绝用任何类似split的函数, c++作太吃亏了
avatar
m*O
112
lmao

【在 m*****f 的大作中提到】
: 跟猫咪都是: come come come....
: 跟狗狗都是: go go go....

avatar
t*e
113
这是谷歌的一道电面题啊,我被面到过了。。。
avatar
y*n
114
。。。

【在 m*****f 的大作中提到】
: 跟猫咪都是: come come come....
: 跟狗狗都是: go go go....

avatar
l*8
115
谢谢! 这个解释倒说得通

【在 b*******y 的大作中提到】
: 我理解题目了
: 看这个例子
: 这样解读
: 1.十〉 1.九 〉 1.一 〉1.零点五 > 1.零.一 >1.零
: 10是指10
: 05是指0.5
: 然后从左边比到右边

avatar
d*1
116
大家都那么文明的吗,我对猫的日常用语:
你打鸡血了啊;你要造反啊;你要把家拆了啊。
不要抓床垫;还抓;
再抓把你胡子剪了;再抓就给你洗澡的啊,再抓就教你游泳的啊。
不要咬我;叫你不要咬了;不要逼我出手打你啊。
怎么又剩一口,不吃完不给新的啊,看谁熬的过谁。
用的最多的一次字,而且我觉得她肯定已经掌握了:
滚。。。。。。
avatar
h*f
117
not so efficient...
#include
#include
#include
#include
#include
#include
int compare(const std::string& v1, const std::string& v2) {
std::vector version1;
std::vector version2;
std::istringstream is1(v1);
std::istringstream is2(v2);
std::string token1;
std::string token2;
double d1, d2;
bool exist1 = true, exist2 = true;
while (true) {
if (exist1) exist1 = std::getline(is1, token1, '.');
if (exist2) exist2 = std::getline(is2, token2, '.');
if (!exist1 && !exist2) break;
if (exist1) {
std::istringstream(token1) >> d1;
version1.push_back(d1);
}
if (exist2) {
std::istringstream(token2) >> d2;
version2.push_back(d2);
}
if (exist1 && exist2) {
if (token1.size() != token2.size()) {
std::stringstream ss1;
std::stringstream ss2;
ss1 << d1;
ss2 << d2;
if (token1.length() > ss1.str().length() || token2.length()
> ss2.str().length()) {
token1.insert(0, "0.");
std::istringstream(token1) >> d1;
version1.back() = d1;
token2.insert(0, "0.");
std::istringstream(token2) >> d2;
version2.back() = d2;
}
}
}
}
size_t x = 0, xe = version1.size();
size_t y = 0, ye = version2.size();
while (x < xe && y < ye) {
if (version1[x] > version2[y]) {
return 1;
}
else if (version2[x] > version1[y]) {
return -1;
}
x++;
y++;
}
if (xe == ye) return 0;
if (xe > ye) return 1;
return -1;
}
int main() {
/*
std::string v1;
std::string v2;
std::getline(std::cin, v1);
std::getline(std::cin, v2);
std::cout << compare(v1, v2) << std::endl;
*/
assert(1 == compare("1.2", "1.05"));
assert(0 == compare("1.2.3", "1.2.3"));
assert(1 == compare("1.2", "1"));
assert(-1 == compare("1", "1.2"));
assert(1 == compare("1.10", "1.9"));
assert(1 == compare("1.9", "1.1"));
assert(1 == compare("1.1", "1.05"));
assert(1 == compare("1.05", "1.01"));
assert(1 == compare("1.01", "1.0"));
return 0;
}
avatar
N*t
118

她的确已经掌握了,从打滚的视频看来

【在 d******1 的大作中提到】
: 大家都那么文明的吗,我对猫的日常用语:
: 你打鸡血了啊;你要造反啊;你要把家拆了啊。
: 不要抓床垫;还抓;
: 再抓把你胡子剪了;再抓就给你洗澡的啊,再抓就教你游泳的啊。
: 不要咬我;叫你不要咬了;不要逼我出手打你啊。
: 怎么又剩一口,不吃完不给新的啊,看谁熬的过谁。
: 用的最多的一次字,而且我觉得她肯定已经掌握了:
: 滚。。。。。。

avatar
i*e
119
那么 1.05 和 1.050
05 是指 0.5,那 050 是指 0.50?
按照他的意思,似乎 0.50 比 0.5 还大啊?
我觉得有 0 在前面的状况,直接去除前面的 0 再比较就可以了。一般来说很少很少人
会想到这个状况,就看改这个要改多长时间了。

【在 b*******y 的大作中提到】
: 我理解题目了
: 看这个例子
: 这样解读
: 1.十〉 1.九 〉 1.一 〉1.零点五 > 1.零.一 >1.零
: 10是指10
: 05是指0.5
: 然后从左边比到右边

avatar
f*8
120
我经常跟两个阿猫说话,我觉得他们也能听懂,叫名字会过来贴在我边上睡。
有精神头的时候会喵喵跟我说话,我会说哦: 麻麻知道了。我也能听出来他们饿了的
喵有点像在叫妈妈声音长而重,平时的喵短而轻,打完架如果有一个过来告状会有呜呜
的生音:大概是说哥哥又欺负我,不是我的错之类。。。
avatar
i*e
121
是,你可以想一想用C 做程序是怎么样的。
不过可以先跟面试官讨论假设有这个split 函数,这题目考点不在实现split。

【在 w****x 的大作中提到】
: 我觉得这题如果用其它语言来做必须拒绝用任何类似split的函数, c++作太吃亏了
avatar
b*l
122
我家猫不爱叫唤,我都是自问自答。比如每次都问你是不是饿啦,妈妈给好东西吃。然
后再尖着嗓子回答妈呀,我是饿了呀,可你给我的不叫好吃的,我要吃鸟鸟吃鼠鼠。等
等。
avatar
d*x
123
every sane institution has its own naming convention...

【在 i**********e 的大作中提到】
: 那么 1.05 和 1.050
: 05 是指 0.5,那 050 是指 0.50?
: 按照他的意思,似乎 0.50 比 0.5 还大啊?
: 我觉得有 0 在前面的状况,直接去除前面的 0 再比较就可以了。一般来说很少很少人
: 会想到这个状况,就看改这个要改多长时间了。

avatar
N*t
124

lol...不会觉得精神分裂么 //run

【在 b***l 的大作中提到】
: 我家猫不爱叫唤,我都是自问自答。比如每次都问你是不是饿啦,妈妈给好东西吃。然
: 后再尖着嗓子回答妈呀,我是饿了呀,可你给我的不叫好吃的,我要吃鸟鸟吃鼠鼠。等
: 等。

avatar
s*k
125
上一个我写的,没有检查字符串是否都在0-9和'.',不知道这个是否需要补上(如果某
个版本不符合要求(10.1.a),返回什么?)。基本思路是第一个.之前按照数字大小比较
,然后其余的一个个位置比较,只要某一个位置其中一个大,剩下的就不需要比较了(比
如2.07和2.1,小数点之后后面的1》前面的0,直接2.1版本大),然后如果某个字符串先
到.,别的还有数字,那么后者大(1.05>1.0.5),如果最后一个已经晚了,另外一个还有
数字,后面大(3.2.1<3.2.10或者3.2.1<3.2.1.5)
大牛指点一下
const char *compVersion(const char *version1, const char * version2){
const char *v1 = version1;
const char *v2 = version2;
//compare the digit before first '.'
if(getNum(v1)>getNum(v2)) return v1;
else if(getNum(v1)>getNum(v2)) return v2;

while((*v1!='\0')&&(*v2!='\0'){
if((*v1-'0')>(*v2-'0')) return v1;
else if((*v1-'0')
if((*v1=='.') && (*v1=='.')){
v1++;
v2++;
}else if(*v1=='.'){
return v2;
}else if(*v2=='.'){
return v1;
}

}

if(v1) return v1;
if(v2) return v2;
}
int getNum(const char* str){
int num = 0;
while(*str!=='.'){
num = num*10+(*str-'0');
str++;
}
return num;
}

【在 h****e 的大作中提到】
: 估计要过好久才有机会面试人,就上一道我以前喜欢出的题目吧。
: 题意非常简单,不到一分钟就可以解释清楚,但是一次完全做对不
: 多见。主要是考写code的能力,而且一般不限制用什么编程语言,
: 让面试的人可以自由发挥,多少都能写出一些code。这样评估时就
: 不是简单的0/1关系。
: 题目:给定两个有效的表示版本号的任意长的字符串,例如"3.0",
: "1.2.3","5.01","4.99.6"等,比较哪一个字符串表示的版本号高。
: 用的是一般公认的比较原则,上边的例子中
: 5.01 > 4.99.6 > 3.0 > 1.2.3。

avatar
b*l
126
哈哈,没养猫前我常对着我的一个玩具狗自说自话。我家人都习惯了,没人说过什么。
结果有一次我女儿细声细气得学我代替猫说话,惊了我一身鸡皮疙瘩。这才知道自己多
肉麻。可是改不了了。。。

【在 N******t 的大作中提到】
:
: lol...不会觉得精神分裂么 //run

avatar
s*k
127
想到一个问题,3.0.1和3.00.1哪个版本大?按照我的算法后者大

【在 s********k 的大作中提到】
: 上一个我写的,没有检查字符串是否都在0-9和'.',不知道这个是否需要补上(如果某
: 个版本不符合要求(10.1.a),返回什么?)。基本思路是第一个.之前按照数字大小比较
: ,然后其余的一个个位置比较,只要某一个位置其中一个大,剩下的就不需要比较了(比
: 如2.07和2.1,小数点之后后面的1》前面的0,直接2.1版本大),然后如果某个字符串先
: 到.,别的还有数字,那么后者大(1.05>1.0.5),如果最后一个已经晚了,另外一个还有
: 数字,后面大(3.2.1<3.2.10或者3.2.1<3.2.1.5)
: 大牛指点一下
: const char *compVersion(const char *version1, const char * version2){
: const char *v1 = version1;
: const char *v2 = version2;

avatar
d*d
128
这个题有好的一面也有不足的地方。
好的是题目内容简单,能考查面试者能否全面考虑所有edge case,以及能否通过有效交
流澄清spec,还有就是coding能力。
但是,这个问题不适合所有position.它过于依赖特定语言的特定用法,而且对于很多
人来说不是常用的。很多人一年也不会用到一次split.而且对于分别用C,c ,java,
perl的程序员来说,effort差别太大,不公平。

【在 h****e 的大作中提到】
: 估计要过好久才有机会面试人,就上一道我以前喜欢出的题目吧。
: 题意非常简单,不到一分钟就可以解释清楚,但是一次完全做对不
: 多见。主要是考写code的能力,而且一般不限制用什么编程语言,
: 让面试的人可以自由发挥,多少都能写出一些code。这样评估时就
: 不是简单的0/1关系。
: 题目:给定两个有效的表示版本号的任意长的字符串,例如"3.0",
: "1.2.3","5.01","4.99.6"等,比较哪一个字符串表示的版本号高。
: 用的是一般公认的比较原则,上边的例子中
: 5.01 > 4.99.6 > 3.0 > 1.2.3。

avatar
R*y
129
C++用boost的一样有split函数...

【在 w****x 的大作中提到】
: 我觉得这题如果用其它语言来做必须拒绝用任何类似split的函数, c++作太吃亏了
avatar
d*f
130
这如果是bug也只能说是出题人的bug

【在 h****e 的大作中提到】
: 二爷和lanti同学(除去typo外)的代码就剩下一个比较tricky的bug了:
: 1.2 > 1.05
: 但是两位给出的是1.2 < 1.05。假设你们同意这是一个bug,下面就是
: 怎么fix的问题了。

avatar
s*d
131
python直接字符串list做sort,一行代码
avatar
l*u
132
拿到第一个token"."前的数字, 比较得出结果
if 前一步数字相等
loop thru the longest one(having the most token ".")
拿到下一个token""前的数字,没token数字=-1
比较得出结果
end loop
end if

【在 h****e 的大作中提到】
: 估计要过好久才有机会面试人,就上一道我以前喜欢出的题目吧。
: 题意非常简单,不到一分钟就可以解释清楚,但是一次完全做对不
: 多见。主要是考写code的能力,而且一般不限制用什么编程语言,
: 让面试的人可以自由发挥,多少都能写出一些code。这样评估时就
: 不是简单的0/1关系。
: 题目:给定两个有效的表示版本号的任意长的字符串,例如"3.0",
: "1.2.3","5.01","4.99.6"等,比较哪一个字符串表示的版本号高。
: 用的是一般公认的比较原则,上边的例子中
: 5.01 > 4.99.6 > 3.0 > 1.2.3。

avatar
n*e
133
c++ 用strtok在atoi吧
或者sscanf循环

【在 R********y 的大作中提到】
: C#里可以直接把string转换成Version类型,然后直接比吧... C++不知道有没有
: 想到个无关的,以前总有题目问string是不是valid的整数,或者这个string是不是
: valid的版本号等等,能不能直接
: try
: { new Version("1.2.3");}
: catch
: (return false;}
: return true;
: ???

avatar
w*x
134

问题是面试官一般不熟悉boost, 这题觉得肯定要禁止用任何split函数

【在 R********y 的大作中提到】
: C++用boost的一样有split函数...
avatar
g*e
135

一样大

【在 s********k 的大作中提到】
: 想到一个问题,3.0.1和3.00.1哪个版本大?按照我的算法后者大
avatar
g*9
136
我说个最简单的解法。
把两个句号之间补0,让两个句号之间都是两位或者三位数字,包括最后一个句号之后,
把两个版本号里的句号全部去掉,把长度短的后面补0,让他们长度一样,然后转换成
long比较大小。
avatar
a*l
137
其实从我的角度看,"不到一分钟就可以解释清楚"就是最大的bug,从专业的角度说就是
程序的requirement没有定义清楚。一个看似很简单的东西,如果不能用语言把所有的
可能性都清楚的规定出来,就会产生歧义,然后一部分人按照一种意思理解,另一部分
人按照另一种意思理解,然后做出来的东西最好的结果是当场不工作,最坏的结果是测
试时什么都好但是一到现场就翘辫子。
我觉得其实所谓的编程技巧差别不太大,就算再高技术的程序员也是难免出点纰漏的,
比如说你想的有几个边际条件要满足,结果老板跑来和你开个小会,然后再回去的时候
就忘了直接checkin了。反而是这种结构、接口、要求上的问题,最容易产生扯皮,反
反复复谁也说不服谁,最浪费时间。
从另一点上说,我觉得拿到一个题目马上就开始coding是fresh graduate的常见的毛病
。为什么说呢?我觉得是思维定式的问题。学校里的学生多年来都是习惯于老师出个题
目学生写答案,题目总是不会错的因为是老师多年检验下来的,老师也是不会来解释的
因为有什么陷阱就是要考的地方,所以看到个requirement就马上开始写代码。但是实
际工作后就会发现,那些requirements的来源的地方其实也都是些搞笑的人,很多都是
临时编凑出来的,所以不能相信这些东西的准确性,什么东西不规定清楚,最好还是别
动手干,免的吃力又不讨好。

【在 h****e 的大作中提到】
: 估计要过好久才有机会面试人,就上一道我以前喜欢出的题目吧。
: 题意非常简单,不到一分钟就可以解释清楚,但是一次完全做对不
: 多见。主要是考写code的能力,而且一般不限制用什么编程语言,
: 让面试的人可以自由发挥,多少都能写出一些code。这样评估时就
: 不是简单的0/1关系。
: 题目:给定两个有效的表示版本号的任意长的字符串,例如"3.0",
: "1.2.3","5.01","4.99.6"等,比较哪一个字符串表示的版本号高。
: 用的是一般公认的比较原则,上边的例子中
: 5.01 > 4.99.6 > 3.0 > 1.2.3。

avatar
m*v
138
基本思路还是基于vector比较,但是把有前缀零的段当作负数处理。请指教,谢
谢。
vector Sort(const vector &v) {
vector, string> > a;
for (int i = 0; i < v.size(); i++) {
vector d;
int k = 0, s = 0, z = 1, c = 1;
while (k < v[i].size()) {
if (isdigit (v[i][k])) {
s = s * 10 + (v[i][k] - '0');
c = c && v[i][k] == '0' ? 1 : 0;
z *= c ? 10 : 1;
}
else if (k == 0 || isdigit(v[i][k - 1])) {
d.push_back(z > 1 ? s * -z : s);
s = 0, z = 1, c = 1;
}
k++;
}
d.push_back(z > 1 ? s * -z : s);
a.push_back(make_pair(d, v[i]));
}
sort(a.begin(), a.end());
vector w;
for (int i = a.size() - 1; i >= 0; i--)
w.push_back(a[i].second);
return w;
}
avatar
t*a
139
我也喜欢这个题目,做为lisp初学者,上一个lisp的解
http://kangtu.me/~kangtu/study/interview.html#sec-14
核心代码只有6行
(defn value [v]
(let [nl (map #(Integer/parseInt %) (clojure.string/split v #"\."))
rst (exp 100 (- 4 (count nl)))
s (* (reduce (fn [x y] (+ (* 100 x) y)) nl) rst)]
s))
(defn hellohackie [versions]
(sort-by value versions))
(hellohackie versions) ; ("1.2.3" "3.0" "4.99.6" "5.01")

【在 h****e 的大作中提到】
: 估计要过好久才有机会面试人,就上一道我以前喜欢出的题目吧。
: 题意非常简单,不到一分钟就可以解释清楚,但是一次完全做对不
: 多见。主要是考写code的能力,而且一般不限制用什么编程语言,
: 让面试的人可以自由发挥,多少都能写出一些code。这样评估时就
: 不是简单的0/1关系。
: 题目:给定两个有效的表示版本号的任意长的字符串,例如"3.0",
: "1.2.3","5.01","4.99.6"等,比较哪一个字符串表示的版本号高。
: 用的是一般公认的比较原则,上边的例子中
: 5.01 > 4.99.6 > 3.0 > 1.2.3。

avatar
s*n
140
在回帖框里大致写了一下
int getNumber (char * const version){
if (!version)
return -1;
in n = 0;
if (*version != '.'){
n = n*10;
n += *version - '0';
}
return n;
}
bool CompareVersion (char * const v1, char * const v2){//return if v1 later
or same as v2
while (v1 != '\0' && v2 != '\0'){
int n1 = getNumber(v1);
int n2 = getNumber(v2);
if (n1 > n2)
return true;
else if (n1 < n2)
return false;
while ('0'v1++;
}
if (v1 == '\0')
break;
else
v1++;//was at '.'
if (v2 == '\0')
break;
else
v2++;//was at '.'
while ('0'v2++;
}
}
if (v1 == '\0')
return false;
return true;
}

【在 h****e 的大作中提到】
: 估计要过好久才有机会面试人,就上一道我以前喜欢出的题目吧。
: 题意非常简单,不到一分钟就可以解释清楚,但是一次完全做对不
: 多见。主要是考写code的能力,而且一般不限制用什么编程语言,
: 让面试的人可以自由发挥,多少都能写出一些code。这样评估时就
: 不是简单的0/1关系。
: 题目:给定两个有效的表示版本号的任意长的字符串,例如"3.0",
: "1.2.3","5.01","4.99.6"等,比较哪一个字符串表示的版本号高。
: 用的是一般公认的比较原则,上边的例子中
: 5.01 > 4.99.6 > 3.0 > 1.2.3。

avatar
l*i
141
一个新想法,假设每个token的长度都不大,double类型的精度足够,不停的比两个
double,这样可以避免很多问题。
vector vs1, vs2;
// assume s has only 0-9 and .
// and begin with digit
vector split(string s)
{
vector ans;
int i;
for(i=0; iint p=i;
for(; i;
ans.push_back(s.substr(p, i-p));
return ans;
}
}
vs1 = split(s1);
vs2 = split(s2);
for(int i=0; istring s1, s2;
s1 = "0." + vs1[i];
s2 = "0." + vs2[i];
double d1, d2;
d1 = atof(s1); // this avoids 1.2 vs 1.05 issue since 0.2 > 0.05
d2 = atof(s2);
if (d1 != d2) return (d1-d2>0 ? +1 : -1);
}
return vs1.size() - vs2.size();
avatar
l*t
142

这个“当然”没看出来怎么个当然法。同一个软件如果这样标版本,那么软件作者估计
也是个文盲。
另外有的软件版本里面还有字母,也要考虑进去一起比较

【在 g*********e 的大作中提到】
:
: 一样大

avatar
p*w
143
我的也很简单,判断一个三角形是什么类型的三角形(比如是等边、等腰、或者其他什
么的)

【在 h****e 的大作中提到】
: 估计要过好久才有机会面试人,就上一道我以前喜欢出的题目吧。
: 题意非常简单,不到一分钟就可以解释清楚,但是一次完全做对不
: 多见。主要是考写code的能力,而且一般不限制用什么编程语言,
: 让面试的人可以自由发挥,多少都能写出一些code。这样评估时就
: 不是简单的0/1关系。
: 题目:给定两个有效的表示版本号的任意长的字符串,例如"3.0",
: "1.2.3","5.01","4.99.6"等,比较哪一个字符串表示的版本号高。
: 用的是一般公认的比较原则,上边的例子中
: 5.01 > 4.99.6 > 3.0 > 1.2.3。

avatar
n*0
144
俺也在思考这个问题。。。。。

【在 b***m 的大作中提到】
: 这题的确有点意思。不过1.60和1.7到底应该哪个大呀?
avatar
j*h
145
parameter normalization有时候非常简单实用啊

后,

【在 g*********9 的大作中提到】
: 我说个最简单的解法。
: 把两个句号之间补0,让两个句号之间都是两位或者三位数字,包括最后一个句号之后,
: 把两个版本号里的句号全部去掉,把长度短的后面补0,让他们长度一样,然后转换成
: long比较大小。

avatar
g*e
146
说个实际情况,正好平时跟build team有打交道。我们公司的做法,各个sub version
section长度是确定的,不足部分补0,比如15.120809.0140.01。该题目里的情况实际
项目里不应该也不会出现的

【在 l*********8 的大作中提到】
: 我跟peking2一样不能理解
: 1.60 > 1.7
: 1.2 > 1.05
: 我这样理解:
: 1.05 < 1.2是因为
: 1.05 < 1.06 < 1.07 < ....... < 1.18 < 1.19 < 1.20 ,而1.20把末尾的0省去就变成
: 1.2
: 但如果末尾的0可以省去, 1.60 就等同于 1.6, 就应该比1.7小。

avatar
n*r
147
俺也奔一个:
static int compare(String a, String b, char c){
if (a == null) return b == null ? 0 : -1;
if (b == null) return 1;
int i = 0, j = 0;
while (i < a.length() && j < b.length()){
while (i < a.length() && a.charAt(i) == c)
i++;
while (j < b.length() && b.charAt(j) == c)
j++;
if (i>=a.length() || j >= b.length())
break;
if (a.charAt(i) == b.charAt(j)){
i++;
j++;
}else
return a.charAt(i) - b.charAt(j);
}
int cnt = 0;
while (i < a.length()){
if (a.charAt(i) != c){
cnt += a.charAt(i) - '0';
if (cnt > 0)
break;
}
i++;
}
while (j < b.length()){
if (b.charAt(j) != c){
cnt += b.charAt(j) - '0';
if (cnt > 0)
break;
}
j++;
}
return cnt;
}
avatar
x*r
148
这个题目最关键的应该是在写代码前问清楚version number的convention,是否可以有
leading 0.如果可以有leading 0,那么意味着版本号的长度应该是fixed,一般两位或
者3位,那么1.4>1.09,直接比较字符串即可。"4">"09", 1.4==1.40>1.09.这同时也意
味着1.9 > 1.20,因为1.9 == 1.90 > 1.20.
如果版本号不可以有leading 0,那么要转化成整数再比较。此时1.9 < 1.20, 1.4 < 1.
09. 因为 1.4 < 1.9 == 1.09.
这两种convention我都见过。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。