如何测试一个数组中的连续的奇数或者偶数 ( 积分: 100 )

  • 主题发起人 主题发起人 liyunfeng
  • 开始时间 开始时间
L

liyunfeng

Unregistered / Unconfirmed
GUEST, unregistred user!
比如有这样数组,偶数连续出现了2个(12,18),但奇数没有连续出现
1,2,5,8,10,11,12,18
下面这个数组
1,3,5,7,2,4,6,7
偶数连续出现了3个(2,4,6),奇数连续4个(1,3,5,7)
如何测试任何一个数组中连续出现奇数或者偶数的次数,数组中的数小于10个
 
怎么没有人回答呀
 
条件还不充份, 比如连续出现几次才记录呢?
例如一组数
3, 5,8,7, 10,11,12,13
要的结果是不是下面的
3, 5, 7 奇数
8, 10, 12 偶数
11, 13 奇数
 
不是要的奇数或者个数,是要连续出现的次数
比如
3, 5,8,7, 10,11,12,13
第一位是奇数,第二数也是奇数,那么就要记录了,是2个奇数连续出现,其他相邻的都是一奇一偶,所以就不要了。
又比如:
3,5,9,11,15,16,18,20,21,22,24
第一位是奇数,后面的都是奇数,那么就是4个连续出现奇数,而偶数只是22,24,那么连续出现两个
现在的问题是如何找任何一个数组中找出奇数或者偶数连续出现的次数和位置
 
不大清楚题意,比如1,3,5,2,4,7,9,1,3
奇数是(1,3,5)3个还是(7,9,1,3)4个?
 
要最多的,比如1,3,5,2,4,7,9,1,3
奇数要(7,9,1,3)4个就行了
偶数要(2,4)2个
 
procedure TForm1.Button1Click(Sender: TObject);
var
strs :TStrings;
s,s2,s1,s3:string;
i,t,g,t1,g1:Integer;
begin
s:='';
t:=0;
g:=0;
t1:=0;
g1:=0;
strs := TStringList.Create;
strs.DelimitedText:='3,4,5,9,11,15,16,18,20,21,22,24,26,56,54,87,77,53,21,55,45,99,75 ';
for i:=0 to Strs.Count-1do
begin
if (strtoint(Strs) mod 2)=0 then
begin
S:=S+Strs+',';
t:=t+1;
if (t1>1) and (t1>g1) then
begin
s3:=s1;
g1:=t1;
end;
s1:='';
t1:=0;
end;
if ((strtoint(Strs) mod 2)=1) or (i=Strs.Count-1) then
begin
s1:=s1+Strs+',';
t1:=t1+1;
if (t>1)and (t>g) then
begin
s2:=s;
g:=t;
end;
s:='';
t:=0;
end;
if (i=Strs.Count-1) then
begin
if (t1>1) and (t1>g1) then
begin
s3:=s1;
g1:=t1;
end;
s1:='';
t1:=0;
end;
end;
ShowMessage('最多的连续偶数是 '+s2+'('+inttostr(g)+'个)'+#10+'最多的连续奇数是 '+s3+'('+inttostr(g1)+'个)');
strs.Free;
end;
 
昨晚看了你的问题,今早就帮你写好了,也调试好了,为你看的舒服,连注释也帮你写了,程序如下(公司机子没网络,所以到现在才发,回来又重新写的):
procedure TForm1.Button1Click(Sender: TObject);
const
data: array[1..9]of integer = (1,3,5,2,4,7,9,1,3);
var
oddStr,evenStr: TStrings;
//存放奇,偶数量的辅助类变量
oddCount,evenCount: integer;
//奇,偶数量
i: integer;
//循环变量
begin
{初始化}
oddCount:= 0;
evenCount:= 0;
oddStr:= TStringList.Create;
evenStr:= TStringList.Create;
oddStr.Delimiter:= ',';
evenStr.Delimiter:= ',';
{分析}
try
for i:= low(data)to high(data)do
begin
if data mod 2 = 0 then
//偶数
begin
inc(evenCount);
if evenCount >1 then
if ((i < high(data)) and (data[i+1] mod 2 = 1)) or (i = high(data)) then
evenStr.Add(IntToStr(evenCount));
oddCount:= 0;
end
else
//奇数
begin
inc(oddCount);
if oddCount >1 then
if ((i < high(data)) and (data[i+1] mod 2 = 0)) or (i = high(data)) then
oddStr.Add(IntToStr(oddCount));
evenCount:= 0;
end;
end;

{找最大连续奇数}
for i:= 0 to oddStr.Count-1do
if oddCount < StrToInt(oddStr.Strings) then
oddCount:= StrToInt(oddStr.Strings);
{{找最大连续偶数}
for i:= 0 to evenStr.Count-1do
if evenCount < StrToInt(evenStr.Strings) then
evenCount:= StrToInt(evenStr.Strings);
{在窗体的标题上显示结果}
self.Caption :='最大连续奇数是:'+ IntToStr(oddCount)+ ';最大连续偶数是:'+ IntToStr(evenCount);
finally
oddStr.Free;
evenStr.Free;
end;

end;

帅哥给分吧,呵呵
 
多谢各位大侠,最近病了,所以没有来。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部