Hiển thị kết quả từ 1 đến 3 / 3

Chủ đề: Đề thi HSG

  1. #1
    Tham gia
    14-01-2012
    Bài viết
    14
    Like
    2
    Thanked 4 Times in 4 Posts

    Đề thi HSG

    Bài 3: (6 điểm) Cho một bảng ô vuông A gồm n cột, n hàng. Từ ô vuông cột 1, hàng 1 người ta điền vào mỗi ô vuông đúng một con số tự nhiên bắt đầu từ 1 liên tiếp đến n2 theo chiều từ trái sang phải và từ trên xuống dưới. Với số tự nhiên k, m cho trước ta biến đổi bảng ô vuông A thành bảng ô vuông B bằng cách dời tất cả các hàng lên trên k hàng, rồi tiếp tục dời tất cả các cột sang trái m cột. Khi dời hàng đến hàng đầu nếu tiếp tục dời thì thành hàng cuối, tương tự cho dời cột..
    Yêu cầu: Viết chương trình nhập số tự nhiên n, k, m, i, j, h
    a) Xuất ra màn hình con số của ô vuông cột i hàng j của bảng B
    b) Xuất ra màn hình chỉ số hàng và cột của ô vuông trong bảng B có giá trị là h.
    Ví dụ: Với n=5, k=7, m=6, i=4, j=3, h=25
    Bảng A ban đầu
    Cột 1 2 3 4 5
    Hàng
    1 11 2 3 4 5
    2 6 7 8 9 10
    3 11 12 13 14 15
    4 16 17 18 19 20
    5 21 22 23 24 25
    k=7
    11 12 13 14 15
    16 17 18 19 20
    21 22 23 24 25
    1 2 3 4 5
    6 7 8 9 10

    m= 6
    12 13 14 15 11
    17 18 19 20 16
    22 23 24 25 21
    2 3 4 5 1
    7 8 9 10 6
    Quote Quote

  2. #2
    Tham gia
    14-01-2012
    Bài viết
    14
    Like
    2
    Thanked 4 Times in 4 Posts

    Ngạc nhiên Cách dời hàng

    Mình mới tìm ra cách dời k hàng: khi đó hàng i của bảng B sẽ tương ứng với hàng (i+k) mod N +1 của bảng A
    P/s: các bạn kiểm tra xem mình nghĩ thế có đúng không nhé!

  3. Thành viên Like bài viết này:


  4. #3
    Tham gia
    29-05-2011
    Location
    Hà Nội
    Bài viết
    1,826
    Like
    1,420
    Thanked 47 Times in 42 Posts
    Mình thì làm trâu bò kiểu này ra cơ mà tốc độ với n lớn chắc ko cao
    Code:
    Uses crt;
    Const MAX=100;
    Type
      mang=array[1..MAX] of integer;
    Var
      a: array[1..MAX,1..MAX] of integer;
      temp,last : mang;
      n,m,k: integer;
      i,j,dem: integer;
    
    Procedure Inra;
    Var
      i,j: integer;
    Begin
      For i:=1 to n do
        Begin
          For j:=1 to n do Write(a[i][j],' ');
          Writeln;
        End;
      Writeln;
    End;
    
    Procedure GanHang(var t:mang; v: integer);
    Var i: integer;
    Begin
      For i:=1 to n do t[i]:=a[v][i];
    End;
    
    Procedure GanCot(var t:mang; v: integer);
    Var i: integer;
    Begin
      For i:=1 to n do t[i]:=a[i][v];
    End;
    
    Procedure DoiHang(x: integer);
    Var
      j,y: integer;
    Begin
      If x=1 then y:=n
      Else y:=x-1;
      GanHang(temp, x);
      For j:=1 to n do
        a[y][j]:=temp[j];
    End;
    
    Procedure DoiCot(x: integer);
    Var
      i,y: integer;
    Begin
      If x=1 then y:=n
      Else y:=x-1;
      GanCot(temp, x);
      For i:=1 to n do
        a[i][y]:=temp[i];
    End;
    
    
    BEGIN
      Clrscr;
    //  Write('Nhap n, m ,k: '); Readln(n,m,k);
      n:=10; m:=6; k:=7; dem:=0;
      For i:=1 to n do
        For j:=1 to n do
          Begin
            dem+=1;
            a[i][j]:=dem;
          End;
      Inra;
      Writeln('k = ',k);
      For j:=1 to k do
        Begin
          GanHang(last,n);
          For i:=1 to n-1 do DoiHang(i);
          For i:=1 to n do a[n-1][i]:=last[i];
        End;
      Inra;
      Writeln('m = ',m);
      For i:=1 to m do
        Begin
          GanCot(last,n);
          For j:=1 to n-1 do DoiCot(j);
          For j:=1 to n do a[j][n-1]:=last[j];
        End;
      Inra;
    END.

  5. Thành viên Like bài viết này:


Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •