Проверка строки
1) "5hr6b1fbdr4fdfhdfh3"
2) "5hr6b1fbdr4fdf2dfh3"
как сделать чтобы при проверке в первом случае n равнялось 2 (там цифры идут 1.3.4.5.6), а во втором 7 (1.2.3.4.5.6.)
Желательно как можно меньше циклов
Допустим есть строки:
1) "5hr6b1fbdr4fdfhdfh3"
2) "5hr6b1fbdr4fdf2dfh3"
как сделать чтобы при проверке в первом случае n равнялось 2 (там цифры идут 1.3.4.5.6), а во втором 7 (1.2.3.4.5.6.)
Желательно как можно меньше циклов
Смотри и учись, это просто:):
var i,n,v,s:integer;
begin
n:=0;
for i:=1 to edit1.GetTextLen do
begin
s:=0;
v:=0;
val(edit1.Text, v, s);
if s=0 then n:=n + v;
end;
if n=21 then edit2.Text:= '7' else edit2.Text:= '2';
end;
Смотри и учись, это просто:):
var i,n,v,s:integer;
begin
n:=0;
for i:=1 to edit1.GetTextLen do
begin
s:=0;
v:=0;
val(edit1.Text, v, s);
if s=0 then n:=n + v;
end;
if n=21 then edit2.Text:= '7' else edit2.Text:= '2';
end;
А если в конце первой строки '3' заменить на '2', тогда что?
Думаю, так будет универсальнее:
var a: set of Byte;
begin
a:=[];
for Result:=1 to Length(s) do
if s[Result] in ['0'..'9'] then a:=a+[StrToInt(s[Result])];
Result:=1;
while (Result<10) and (Result in a) do Inc(Result);
end;
А если в конце первой строки '3' заменить на '2', тогда что?
Думаю, так будет универсальнее:
var a: set of Byte;
begin
a:=[];
for Result:=1 to Length(s) do
if s[Result] in ['0'..'9'] then a:=a+[StrToInt(s[Result])];
Result:=1;
while (Result<10) and (Result in a) do Inc(Result);
end;
Не думаю, что в этом смысл есть, ведь сказано как можно меньше циклов.
Не думаю, что в этом смысл есть, ведь сказано как можно меньше циклов.
Я, конечно, не знаю точно, что нужно автору, но думаю, что целью алгоритма должно стать нахождение минимальной отсутствующей цифры в строке (за исключением нуля). Если заменить, как я уже говорил, в конце первой строки '3' на '2', то, несмотря на то, что правильный ответ 3, твой код выдаст 2. Он вообще может выдать только 2 или 7, других вариантов нет :) А по поводу количества циклов... Если можешь, предложи меньше, но с такой же функциональностью.