假设该比赛规定第一名得9分,第2-8名分别得7-1分,那么得分和名次如下:
1001 张三 1.75米 第一名 9分
3412 李四 1.70米 第二名 6.5分((7+6)/2)
2387 刘德 1.70米 第二名 6.5分
1132 王妃 1.65米 第四名 5分
注意:第三名不存在,而2人并列第二名,则第二名和第三名的得分累加起来均分给二人。现在我可以根据录入的成绩进行自动排名,就是不知道怎么根据排名自动给分~如何实现??
1001 张三 1.75米 第一名 9分
3412 李四 1.70米 第二名 6.5分((7+6)/2)
2387 刘德 1.70米 第二名 6.5分
1132 王妃 1.65米 第四名 5分
注意:第三名不存在,而2人并列第二名,则第二名和第三名的得分累加起来均分给二人。现在我可以根据录入的成绩进行自动排名,就是不知道怎么根据排名自动给分~如何实现??
Var
I, J, Total, Order, Count, NextOrder: Integer;
Score: Array[1..8] Of Integer;
begin
For I:= 1 to 8 do
Score[I] := 9 - I;
Score[1] := 9;
I := 0;
Order := 1;
Count := 1;
Return.Clear;
For I:= 0 to 7 do
begin
Order := StrToInt(Input[I]);
if I = 7 then
NextOrder := Order
else
NextOrder := StrToInt(Input[I+1]);
if (Order = NextOrder) then
Inc(Count)
else
begin
Total := 0;
for J := Order to Order + Count -1 do
Total := Total + Score[J];
for J :=0 to Count - 1 do
Return.Add(Format('%d %f', [Order, Total/Count]));
Count := 1;
end;
end;
end;
建表
代码,身高,姓名, 名次,得分,序号
1001 张三 1.75米 第1名 1
3412 李四 1.70米 第2名 2
2387 刘德 1.70米 第2名 3
null null null null 4
1132 王妃 1.65米 第4名 5
1132 王妃 1.65米 第5名 6
1132 王妃 1.65米 第5名 7
null null null null 8
1132 王妃 1.65米 第6名 9
1132 王妃 1.65米 第7名 10
可以分为两个部分:1:下一名为空,2:下一名部位空(名次)
1:首先获取名次为空的序号 (当然这里可能有好多),数据循环利用序号-1为条件获取并列名次个数和分数
2:不要上面那就是直接得分了,,,
var Input,Return:TStrings;
begin Input:=TStringlist.Create;
return:=tstringlist.Create;
return.CommaText:='';
adoquery1.Close;
adoquery1.SQL.Clear;
adoquery1.SQL.Add('select top 8 status from Score order by Achievement desc');
adoquery1.Open;
adoquery1.First;
while adoquery1.Eof do
begin
input.Add(adoquery1.Fieldbyname('status').Value) ;
adoquery1.Next;
end;
showmessage(input.CommaText);
// input.Text:='1,2,2,4,5,6,6,8';
//CaculateScore(Input, Return);
//showmessage(return.CommaText);
end;
1001 张三 1.75米 第一名 9分
3412 李四 1.70米 第二名 6.5分((7+6)/2)
2387 刘德 1.70米 第二名 6.5分
1132 王妃 1.65米 第四名 5分 select
编号 as 编号,
姓名 as 姓名,
'第'+cast((select count(1) from 表名 where 分数<Main.分数)+1) as varchar)+'名' as 名次,
分数 as 分数
from 表名 as Main
1001 张三 1.75米 第一名 9分
3412 李四 1.70米 第二名 6.5分((7+6)/2)
2387 刘德 1.70米 第二名 6.5分
1132 王妃 1.65米 第四名 5分 select
编号 as 编号,
姓名 as 姓名,
'第'+cast((select count(1) from 表名 where 分数<Main.分数)+1 as varchar)+'名' as 名次,
分数 as 分数
from 表名 as Main