Задача 14 Урок 15

Задача 14 Урок 15

Дан массив длиной N (не более 100 элементов). Проверить, что в нем в встречаются все числа от 0 до k, где 0≤k

program lesson15_14;
type
    myArr = array[0..99] of integer;

function check(a, b: myArr; k: integer): string;
var
    i, j: integer;
begin
    for i := low(a) to high(a) do
        for j := low(b) to k - 1 do
            if a[i] = b[j] then
            begin
                b[j] := -1;
                break;
            end;
    for i := low(b) to k - 1 do
        if b[i] <> -1 then
        begin
            result := 'no';
            exit;
		end;
    result := 'yes';
end;

var
    arr1: myArr;
    arr2: myArr;
    k, i: integer;
begin
    k := 5;
    for i := low(arr2) to k - 1 do
        arr2[i] := i;

    randomize();
    for i := low(arr1) to high(arr1) do
        arr1[i] := random(100);

    write(check(arr1, arr2, k));
    readln();
end. 
vedro-compota's picture

можно решить без второго массива

_____________
матфак вгу и остальная классика =)

program lesson15_14;
type
    myArr = array[0..99] of integer;

function check(a: myArr; k: integer): string;
var
    i, j, count: integer;
begin
    for i := 0 to k - 1 do
    begin
        count := 0;
        for j := low(a) to high(a) do
            if i <> a[j] then
                count := count + 1;

        if count = high(a) + 1 then
        begin
            result := 'no';
            exit;
		end;
	end;
	result := 'yes';
end;

var
    arr1: myArr;
    k, i: integer;
begin
    k := 5;

    randomize();
    for i := low(arr1) to high(arr1) do
        arr1[i] := random(100);

    writeln(check(arr1, k));

    readln();
end.
vedro-compota's picture

function check(a: myArr; k: integer): string;

-- лучше возвращать boolean

 for j := low(a) to high(a) do
            if i <> a[j] then
                count := count + 1;
 

-- можно сделать оптимальнее с break

_____________
матфак вгу и остальная классика =)

program lesson15_14;
type
    myArr = array[0..99] of integer;

function check(a: myArr; k: integer): boolean;
var
    i, j: integer;
begin
    for i := 0 to k - 1 do
    begin
        result := false;
        for j := low(a) to high(a) do
            if i = a[j] then
            begin
                result := true;
                break;
			end;

        if not result then
            exit;
	end;
end;

var
    arr: myArr;
    k, i: integer;
begin
    k := 5;

    randomize();
    for i := low(arr) to high(arr) do
        arr[i] := random(100);

    writeln(check(arr, k));
    readln();
end.  
vedro-compota's picture

решение засчитано

_____________
матфак вгу и остальная классика =)