以棋会友,诚聘高贤;→又加了算法大挑战,越来越有意思了!→补充新条件:计算机专业、本科以上的人--基本不要,还骂了几句,有人能反驳吗?但求一败!→骂的更厉害了!

[8D][8D]
多谢各位捧场,如有兴趣,可以先寄以下三项内容过来:
  1.简历和照片
2.自述对DELPHI的了解程度(最好是找一本比较全面的书,把里面的目录抄下来,熟悉
且用过的:打勾;学过但没用过的:打圈;没学过:打叉)
3.为了实现某个任务而写的算法程序(最好写明工作任务、解决思路)。
然后大家约个时间,在联众上切磋一下。
  首先,要过我徒弟chji这一关(偷偷告诉你,他比我还厉害[;)][;)])
  然后我再亲自上(会拼老命的![:(!][:(!])
说好了,不准找枪手啊![:D][:D]
 
有意思 我还是老老实实的写没创意的code吧
 
>>“计算机专业、本科以上学历”的人以自己的学历和高工资而自豪!??
>>“非计算机专业、本科以上学历”的人以自已的事业和成就而自豪!??
看不懂,不知道为什么会有这样的结论。
这个帖子看了很多次,终于也忍不住想说两句。
我琢磨了半天,也没有搞清楼主是什么样的人,大概不是“计算机专业、
本科以上学历”的人。
看来楼主是请不起“计算机专业、本科以上学历”的人,但也没必要吃不
了葡萄说葡萄酸嘛。我们可以这样假设一下,有两个人,一个人是本科
毕业,一个人是中专毕业,他们那个水平、能力更强,可能谁也不能下
结论,就一个学历,说明什么问题!!我们可以在这样假设一下,有两
百个人,100个是本科毕业,100个是中专毕业,那么100个本科毕业的
人的总体能力和100个中专毕业的总体能力那个强?相信大家会有自己
的答案。
为什么楼主会有“计算机专业、本科以上学历”的人以自己的学历和高工
资而自豪这个结论?我没有想明白。计算机专业又不比其他专业高一等
工资未必比其他专业的人高,为什么会自豪!?如果说在IT业是这样,
那又有一个问题,既然楼主这样的人都是论能力给钱,那其他老板估计
也不是个个傻瓜,当然也是论能力给钱,如果这样的话,计算机专业
的人工资高些,我想也不是因为只是计算机专业这一个原因吧,是不是
能力普遍更强一些呢?
“没用的破大学生”,楼主可能指某些大学生能力很差吧。确实有一些
这样的大学生。不过,不要太偏激。林子大了,什么鸟都有。大学生
也一样。不过,还是那个比喻,随机找100个大学生一组和100个中专
生一组,让你选其中一组给你干活,你用哪一组?当然,如果你考虑
工资问题,你可能会说,我选中专那组。
对于用中国象棋来招人,我也觉得有点离谱。只见过用考试、智力测试
来招人,还真没有见过下棋来招人。人各有爱好,下棋说明不了什么,
除非这两人都喜欢下棋,同一天学棋,到可以比比,但还是说明不了太
多问题,起码在编程这个问题上。如果从逻辑角度讲,中国象棋的复杂
度比不了国际象棋,更比围棋差远了,但棋力的高低,逻辑思维只是一
部分,逻辑思维强的人未必下得过逻辑思维差的人,因为还有太多其他
非逻辑思维的因素在里面。说道逻辑思维,给大家出一道很有名的题。

有12个球,大小颜色等都一样,只有其中1个的重量和另外11个不一样,
也就是说,你只能通过重量的判断才能找出那个不一样的球。问题是,
给你一个天平,只能称3次,找出那个球。注意:那个球的重量和其他
球不一样,但并不知道是重了还是轻了,如果知道轻重,小学生都做出
来了。10分钟内解决的人是天才。30分钟搞定的人是高手。1个小时做
出来聪明,2小时想明白,还行。1天想通还不苯。否则嘛,我劝你还
是不要做程序员了,那样的话,程序的逻辑错误、漏洞就惨不忍睹了。
pyzfl:既然你考别人,敢不敢试试这道题呀?
 
既然我出题了,就先把你的题做了
对于你们的算法,倒序循环确实很有创意,不过,我觉得不用倒序,也
无须正序,也可以一遍循环完成
如下
Values:TStrings;
First,Second,Third: string;
for i := 0 to Count - 1do
begin

//取一级科目名称
First := GetFirst(当前科目);
if First <> '' then
begin
if Values[First] = '' then
begin
Values[First] := FloatToStr(Balance);//Balance为余额
end
else
begin
Values[First] := FloatToStr(StrToFloat(Values[First])+Balance);//Balance为余额
end;
end;
//取二级科目名称
Second := GetSecond(当前科目);
if Second <> '' then
begin
if Values[First+Second] = '' then
begin
Values[First+Second] := FloatToStr(Balance);//Balance为余额
end
else
begin
Values[First+Second] := FloatToStr(StrToFloat(Values[First+Second])+Balance);//Balance为余额
end;
end;
//取三级科目名称
.....
//取四级科目名称
.....
//取五级科目名称
.....
end;
 
是不是 5,5 称
任意一组中 2,2 称
结果就出来了。
哈,我居然也算“天才”?自己都不信!
 
小雨哥,你要信了,你就是“蠢才”了,哈,你想得也太简单了
 
是,大错了。唉。
 
应该是 3,3。
平,保留一组,再 3,3 。平,取另一组之1,1称。
任何一次不平,结果就出。
 
不对,不对,轻重是不知的,最后一次如果不平,就测不出。
到底怎么做啊?
 
对了,就是 3,3 的方法,然后变为 2 ,2 然后...哈。我果然“天才”。
 
小雨哥,你真是“天才”,呵呵
 
[8D][8D]
To SS2000:
你的程序我看不懂!
我不敢说你不行,也不敢说你行,最好你老老实实建立一个数据表,用这段程序试一下。
实践是检验真理的唯一标准!
以下是我的几点疑虑:
>>Values:TStrings;
  [red]要读进内存?[/red]
>>First,Second,Third: string;
>>
>>for i := 0 to Count - 1do
>>begin
>>
>> //取一级科目名称
>> First := GetFirst(当前科目);  [red]GetFirst(当前科目) 这个函数从哪里来,起什么作用啊?[/red]
>> if First <> '' then
>> begin
>> if Values[First] = '' then
  [red]Values[First] = ''能作凭据?怪了![/red]
>> begin
>> Values[First] := FloatToStr(Balance);//Balance为余额   [red]这个Balance从哪里来?怪了![/red]
>> end
>> else
begin
>> Values[First] := FloatToStr(StrToFloat(Values[First])+Balance);//Balance为余额
>> end;
>> end;
>> //取二级科目名称
>> Second := GetSecond(当前科目);
>> if Second <> '' then
>> begin
>> if Values[First+Second] = '' then
>> begin
>> Values[First+Second] := FloatToStr(Balance);//Balance为余额
>> end
>> else
begin
>> Values[First+Second] := FloatToStr(StrToFloat(Values[First+Second])+Balance);//Balance为余额
[red]如果当前节点是枝节点,数据是错的(由于其它因素,它不等所有下属子节点的和),你怎么办?[/red]
>> end;
>> end;
>> //取三级科目名称
>>
>> .....
>>
>> //取四级科目名称
>>
>> .....
>>
>> //取五级科目名称
>>
>> .....
>>end;

我不敢随意否定你的劳动成果,但如果我看了也想不通,也没有用实践检验的话,还是不敢
肯定你的劳动成果!
你说你已经解决了这个问题,然后给出一段天书般的代码。
  高吗?高(大拇指)!
  行吗?未必!
你说是吗?
[red]我和同事分析了一下你的思路,作了一些补充!最后还是认为:十有九不通![/red]
 
这么厉害,怎么找你下啊
是下棋还是编程啊。怎么没题目啊
 
[:(][:(]
老实认罪:
  小学不错,中学考试倒数前几名,第一年升高中时距分数线一百分以上,第二年高分数线
二分上本地职业高中职业班,第一年高考时虽然是本班最高分,但距高考最低分数线差五十分以
上,第二年高考比专科分数线低一分,侥幸被本省一个小学校(也是专科大学,但还没有正常
高中那么大、那么好)录取,所学专业为机电,学历为专科。
  毕业后做过教师、冲床工、注塑工、产品外形设计师、计量室、资料室主任,最后不知不
觉搞上了软件....一直到现在。
  惨不惨?
  你们是温室里的禾苗。我是野外的虬枝。
  上天待我不薄,让我能在这里说话,让我和大家一样做软件!
[8D][8D]
  [h2][red]挑战天下![/red][/h2]
  各位专业人士(包括计算机专业,本科学历以上的人),有胆就和我比一比,看谁做出
的软件好?
  [h2][red]好不好不是吹出来的,有本事半年以后看![/red][/h2]
 
看不懂?可能怪我写得太简单,因为我是和你讨论问题,有些就省了
而且我看见前面一个也很简单,你也看懂了,所以就简单化了,抱歉
不过你要是认为这段代码没有测试过,就错了,因为这是我从我的
实际代码中提出来的
对这段代码我解释一下
Values 是个变量 TStrings
只需要做如下初始化就可以 Values := TStringList.Create;
如果说数据在数据表中,我们假设科目代码字段为Code,余额字段为
Balance. ADOQuery1: TADOQuery,操作该数据表
数据库操作这里就会省了,不会有意见吧
ADOQuery1: TADOQuery;
Values: TStrings;
Balance:do
uble;
Code: string;
KmCode: string;
i: integer;
//省了数据库的操作
//把数据库的内容读入ADOQuery1,通常用 select * from 科目表
Values := TStringList.Create;
while not ADOQuery1.Eofdo
//也可以用 for i := 0 to ADOQuery1.Count - 1do
begin
Code := ADOQuery1.FieldByName('Code').AsString;
Balance := ADOQuery1.FieldByName('Balance').AsFloat;
//取1到5级科目代码做汇总
for i := 1 to 5do
begin
KmCode := GetKmCode(Code,i);
if KmCode <> '' then
begin
if Values[KmCode] := '' then
Values.Add(KmCode + '=' + FloatToStr(Balance))
else
Values[KmCode] := FloatToStr(StrToFloat(Values[KmCode])+Balance));
end
else
break;
end;

ADOQuery1.Next;
end;

function GetKmCode(Code: string;
i: integer): string;
begin
result := '';
case i of
1: if Length(Code) >= 3 then
result := Copy(Code,1,3);
2: if Length(Code) >= 6 then
result := Copy(Code,1,6);
3: if Length(Code) >= 8 then
result := Copy(Code,1,8);
4: if Length(Code) >= 10 then
result := Copy(Code,1,10);
5: if Length(Code) >= 12 then
result := Copy(Code,1,12);
end;
end;

这会除了数据库的部分操作省略了,可都没有省略。
还是不明白?那我就在解释一下。
在这里主要是要明白TStrings这个类的用法,这有个解释
When the list of strings for the TStrings object includes strings
of the form Name=Value, use Values to get or set the value part of
a string associated with a specific name part. If the listdo
es not
contain any strings of the proper Name=Value form, or if none of
those strings matches the Name index, Values returns an empty string.
Strings of the form Name=Value are commonly found in .INI files.
For example, here are a few strings taken from a DELPHI.INI file:
DisplayGrid=1
SnapToGrid=1
GridSizeX=8
GridSizeY=8
The strings that make up the Params property of a database component
(TDatabase) have this format as well.
The Name that identifies the string is to the left of the equal sign (=),
and the current Value of the Name identifier is on the right side. There
should be no spaces present before or after the equal sign.
实际上这个算法有两点,第一,可以任意汇总,无需科目排序,比如,当读到
1710010101这个科目的时候,根据科目的设定,我们就可以把该科目分别汇总
到171、17001、17100101这些科目。当然是否汇总到1710010101这个科目,无
关紧要,因为最底层目录汇总也他一个。在汇总到171时候,就又有第二个问题,
如何找到171的科目并且汇总,这里面,我们用到了TStrings类的Values属性,
我们包汇总的结果都放入到TStrings,使汇总结果如下形式(字符串)
171=49406.85
171000=41306.85
171001=6750
171002=1350
这样,我们能就利用TString的Values属性非常方便的定位171这个科目的位置了。
由于Values变量初始为空,这样,当我们汇总的时候,就需要判断该科目是否
已经有汇总值,没有我们就加一行如“171=41306.85”,如果有,我们就把它的
值取出来,汇总,再放回去。
明白了吗?还不明白,我也没有办法了
顺便说一句,我曾开发过财务软件,现在还在卖,当然是小公司开发的。
所以,你要以为我在写天书,经不起实践,那就大错特错了
另外:如果说数据表中的所有科目都已有有数据,也就是说不是最底层的科目已经
有数据了那么,在汇总的时候需要判断当前科目是否是最底层的科目,如果是,
汇总,如果不是,忽略不汇总
 
>>  上天待我不薄,让我能在这里说话,让我和大家一样做软件!
既然上天让你说话就不要丑气薰天的,阿门!
>>[8D][8D]
>>  [h2][red]挑战天下![/red][/h2]
>>  各位专业人士(包括计算机专业,本科学历以上的人),有胆就和我比一比,看谁做出
>>的软件好?
>>  [h2][red]好不好不是吹出来的,有本事半年以后看![/red][/h2]
软件是一种态度,这不是我说的,希望你看的懂。
其实你的学历也挺高,为什么这样没教养呢?
 
[8D][8D]
为了表明我不是白痴,我说:明白!(也许还是不明白,不过不敢承认啊)
但以你的如下表来说:
171=49406.85
171000=41306.85
171001=6750
171002=1350
在处理171000时是不是要对171操作一次?
在处理171001时是不是又要对171操作一次?
在处理171001001时是不是又要对171、171001各操作一次?
正确性没关系,但效率能比得过我们的“只赋值一次”吗?
你能解决这个问题,这是你的胜利,但你再看一看你的代码,是不是有很多,又要GetKmCode,
又要GetFirst(当前科目);又要while not ADOQuery1.Eofdo

好厉害啊,但我只要一个带while not ADOQuery1.Eofdo
的过程就解决了,总共不要50条。
再一个,在你处理171001时,如果171001人余额为300,它只有171001001一个子科目,但余额
是600,那你这时对171的操作就是错的,如何处理呢?(可能你的数据不会有这个错,但有这
个可能,而且这个程序的本意也就是这样,逐层汇总!)
诚心讨论,免去不必要的意气之争,你说,是不是呢?
如有错谬,恳请指正,在下洗耳恭听!
 
另外:如果说数据表中的科目都有数据,也就是说不是最底层的科目已经有数据了
那么,在汇总的时候需要判断当前科目是否是最底层的科目,如果是,汇总,如果
不是,忽略不汇总
 
顶部