delphi基础算法例题

要求用delphi实现,1-2+3-4+5-6+7......+n这个题,并要求解释,本人菜鸟。

你所给出的公式有个规律如下代码:
function calc(const n: Integer): integer;
//参数n就是你所需要计算的最后一位,就
//向1-2+3-4+5-6+7的话,n就是7
begin
if (n mod 2)=0 then//如果n是偶数
begin
Result:=-floor(n/2);//返回负的n除2
end else begin//如果不是偶数
Result:=floor((n+1)/2) ;//返回n+1除2
end;
end;
//floor向下取整。需要引用math单元
//用1楼循环的方式可以达到,不过如果是1000000的话,就假死了。建立个线程又得不偿失!
//不明白百度Hi我
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-30
var
p:double; //指定为实数类型 用来保存累加值并返回
i,w:integer; //指定为整数类型
begin
for w:=1 to 100 do begin //循环2次
if w mod 2 <>0 then i:=1 //如果是奇数 1 3 5 7 9.... 则令i=1
else i:=-1; //否则是偶数 2 4 6 8 10... 则令i=-1 为了取偶数的相反数
p:=p+i*w; //累加到p
end;
showmessage(floattostr(p)); //循环100次就是1+(-2)+3+(-4)+5....+99+(-100)= - 50
end;

如果是1+2+3+4+...这样的计算你应该会吧 那相邻数为负数的话 只要取相
反值就行了呀 乘以1还是原来的值 乘-1的话 就变成相反值了 这就是原理
第2个回答  2011-09-30
看这样行不:
c#:
int GetCalc(int target)
{
if (target % 2 == 0)
{
return = target / 2 - target;
}
else
{
return = (target + 1) / 2;
}
}

Delphi:

function GetCalc(int target):integer;
begin
if(target mod 2 =0)
Result:=round(target/2)-target;
else
Result:=round((target+1)/2);
end;
第3个回答  2011-09-30
program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

var
i,n,s:Integer;

begin
{ TODO -oUser -cConsole Main : Insert code here }
Write('请输入1正整数:');
Read(n);
s:=0;
for i:=1 to n do
if i mod 2 =1 then s:=s+i
else s:=s-i;
Writeln('1-2+3-4+5-6+7......+n='+inttostr(s));
Readln(n);
end.
相似回答