Большие значения/спиральное заполнение массива

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Stream
Сообщения: 26
Зарегистрирован: 05 фев 2008, 13:09

Имеется 2 задачи, для подготовки делаю но не могу разобраться
№1
Найти количество делителей у числа если чётное вывести 0 если нечётное кол-во 1 .

Пример:
2(кол-во чисел)
4 5

Ответ:
1 0

Код: Выделить всё

var input,output:text; a,b,n,k,i,j:longint; mass:array[1..100000] of longint;
begin

assign(input,'input.txt');
reset(input);
assign(output,'output.txt');
rewrite(output);
readln(input,n);
For i:= 1 to n do
begin
k:=0;
read(input,mass[i]);
For j:= 1 to mass[i] do
begin
If mass[i] mod j = 0 Then
begin
inc(k);

end;
end;
If k mod 2 = 0 Then write(output,'0 ') Else write(output,'1 ');
end;
close(input);
close(output);
end.
Проблема в том что число может быть до 10 в 8 степени чего лонгинт никак не обрабатывает как можно это избежать.

№2
0<n<100
Имеется массив размеров n*n записать спиралью начиная с центра против часовой стрелки.
Пример:


5 4 3
6 1 2
7 8 9

Тут я полный профан никогда не умел с матрицами работать.
dr.Jekill
Сообщения: 526
Зарегистрирован: 03 янв 2009, 23:17
Откуда: Voronezh
Контактная информация:

В первой задаче: "Найти количество делителей у числа если чётное вывести 0 если чётное кол-во 1 если нечётное." - Вы сами поняли, что написали? Можно хотя бы со знаками препинания?
А во второй, Вы не подумали о том, что если n четное, то центра просто не будет?
Нет религии выше истины
Stream
Сообщения: 26
Зарегистрирован: 05 фев 2008, 13:09

Вот вторая решенная

Код: Выделить всё

uses crt;
var a:array[1..20,1..20]of byte;
    n,x,y,k,z:integer;
begin
clrscr;
write('n=');readln(n);
if odd(n) then {dlya nechetnyh}
  begin
    x:=n div 2+1;y:=n div 2+1;
    k:=0;
    for z:=1 to n*n do
      begin
       a[x,y]:=z;
       case k mod 4 of
       0:begin
         inc(y);
         if y=x+1 then inc(k);
         end;
       1:begin
         dec(x);
         if(n-x+1)=y then inc(k);
         end;
       2:begin
         dec(y);
         if x=y then inc (k);
         end;
       3:begin
         inc(x);
         if y=(n-x+1) then inc(k);
         end;
       end;
     end;
   end
else   {dlya chetnyh}
   begin
     x:=n div 2+1;y:=n div 2;
     for z:=1 to n*n do
       begin
        a[x,y]:=z;
        case k mod 4 of
        0:begin
          inc(y);
          if x=y then inc(k);
          end;
        1:begin
          dec(x);
          if(n-x+1)=y then inc(k);
          end;
        2:begin
          dec(y);
          if x-1=y then inc (k);
          end;
        3:begin
          inc(x);
          if y=(n-x+1) then inc(k);
          end;
        end;
      end;
   end;
for x:=1 to n do
  begin
    for y:=1 to n do
    write(a[x,y]:4);
    writeln;
  end;
readln
end.
Первую исправил.
Ответить