Diễn đàn tin học Văn Lang - Vạn Ninh
Chào mừng bạn đến với Diễn đàn Tin học Văn Lang - Vạn Ninh của chúng tôi !
Hãy đăng nhập hoặc đăng kí tài khoản để trải nghiệm nhiều điều thú vị tại đây !
Thân ái !

Diễn đàn tin học Văn Lang - Vạn Ninh

Nơi trao đổi thông tin, tăng cường hợp tác, giải đáp những vướng mắc khi học lập trình Pascal
 
Trang ChínhCalendarTrợ giúpTìm kiếmThành viênNhómĐăng kýĐăng Nhập

Share | 
 

 Giải các bài toán đặc biệt về mảng một chiều

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down 
Tác giảThông điệp
Admin
Admin
avatar

Posts : 113
Danh tiếng : 5
Join date : 10/11/2014
Age : 16

Bài gửiTiêu đề: Giải các bài toán đặc biệt về mảng một chiều   13/11/2014, 18:29

Bài 1: Cho 2 dãy số thực a1,a2,a3,…,an (1) ; b1,b2,b3,…,bm (2). Dãy (1) được gọi là dãy con của dãy 2 nếu bỏ đi k phần tử (k>=0) trong (2) thì có (1). Chẳng hạn: dãy 1,3,5 là dãy con của dãy 0,1,2,1,4,3,5,7. Hãy nhập vào 2 dãy và cho biết dãy (1) có phải là dãy con của dãy (2) hay không.
Bài giải:
uses crt;
type mang=array[1..100] of integer;
var a,b:mang;
   n,m,i,j,h:integer;
{*****}
procedure daycon(var a,b,t:integer;c,d:mang);
var dem,i,j,l,k:integer;
begin
    dem:=0;
    t:=0;
    for i:=1 to a do
    begin
        for j:=1 to b do
            if c[j]=d[i] then
               begin
                    inc(dem);
                    for l:=1 to a do
                    for k:=1 to b do
                    if (l<>i) and (k<>j) and (c[k]=d[l]) then
                    inc(dem);
               end;
                    if dem>=a then inc(t);
                 dem:=0;
    end;
end;
{*****}
begin
    clrscr;
    write('muon nhap bao nhieu so trong day 1:');readln(n);
    write('Muon nhap bao nhieu so trong day 2:');readln(m);
    writeln('Day 1:');
    for i:=1 to n do
        begin
             write('nhap a[',i,']:');
             readln(a[i]);
        end;
    writeln('Day 2:');
    for i:=1 to m do
        begin
             write('nhap b[',i,']:');
             readln(b[i]);
        end;
    write('Day 1:');
    for i:=1 to n do write(a[i]:3);
    writeln;
    write('Day 2:');
    for i:=1 to m do write(b[i]:3);
    writeln;
    if n<m then
       begin
            daycon(n,m,h,b,a);
            if h=n then writeln('Day 1 la day con cua day 2')
                   else writeln('Khong day nao la day con cua day kia');
       end;
    if n>m then
       begin
            daycon(m,n,h,a,b);
            if h=n then writeln('Day 2 la day con cua day 1')
                   else writeln('Khong day nao la day con cua day kia');
       end;
    readln;
end.

Bài 2: “Dãy đoạn con” tương tự dãy con nhưng các phần tử liên tiếp. Chẳng hạn: dãy 1,2,1 là dãy đoạn con của dãy 0,1,2,1,4,5,6,3. Còn dãy 1,4,6 không là dãy đoạn con của nó. Hãy nhập vào 2 dãy và cho biết dãy (1) có phải là dãy đoạn con không.
Bài giải:
uses crt;
type mang=array[1..100] of integer;
var a,b:mang;
   n,m,i,j,h:integer;
{-----------}
procedure daycon(var a,b,k:integer;c,d:mang);
var dem,i,j,t,p:longint;
begin
    dem:=0;
    t:=0;
    for i:=1 to a do t:=t*10+d[i];
     for i:=1 to b do
     begin
        for j:=i to b do
            begin
                 p:=p*10+c[j];
                 if p=t then inc(dem);
            end;
        if dem<>0 then inc(k);
        p:=0;dem:=0;
     end;
end;
{-----------------------}
begin
    clrscr;
    write('muon nhap bao nhieu so trong day 1:');readln(n);
    write('Muon nhap bao nhieu so trong day 2:');readln(m);
    writeln('Day 1:');
    for i:=1 to n do
        begin
             write('nhap a[',i,']:');
             readln(a[i]);
        end;
    writeln('Day 2:');
    for i:=1 to m do
        begin
             write('nhap b[',i,']:');
             readln(b[i]);
        end;
    write('Day 1:');
    for i:=1 to n do write(a[i]:3);
    writeln;
    write('Day 2:');
    for i:=1 to m do write(b[i]:3);
    writeln;
    if n<m then
       begin
            daycon(n,m,h,b,a);
            if h<>0 then writeln('Day 1 la day doan con cua day 2')
                   else writeln('Khong day nao la day doan con cua day kia');
       end;
    if n>m then
       begin
            daycon(m,n,h,a,b);
            if h<>0 then writeln('Day 2 la day doan con cua day 1')
                   else writeln('Khong day nao la day doan con cua day kia');
       end;
    readln;
end.

Bài 3: Dãy được gọi là đối xứng nếu viết các phần tử của nó theo thứ tự ngược lại thì vẫn được chính nó. Dãy được gọi là khả đối xứng nếu đổi chổ các phần tử của nó thì được dãy đối xứng. Cho một dãy số nguyên, kiểm tra xem nó có khả năng đối xứng hay không? Nếu có thì biến đổi nó để được một dãy đối xứng.
Bài giải:
uses crt;
var a:array[1..100] of integer;
   n,i,j,dem,t,so:integer;
{--------------}
procedure sx(var a,b:integer);
var tam:integer;
begin
    tam:=a;
    a:=b;
    b:=tam;
end;
{-----------------}
begin
    clrscr;
    write('So phan tu cua day:');readln(n);
    for i:=1 to n do
        begin
             write('nhap a[',i,']:');
             readln(a[i]);
        end;
    writeln('Day ban dau la:');
    for i:=1 to n do write(a[i]:3);
    writeln;
    dem:=0;
    t:=0;
    for j:=1 to n-1 do
        for i:=j+1 to n do
            if a[i]=a[j] then inc(dem);
    if (dem<>0) and (dem=n div 2) then
       begin
            writeln('Day nay co kha doi xung');
            writeln;
            for i:=1 to n do
                begin
                     for j:=1 to n do
                         if a[i]<>a[j] then
                            begin
                                 inc(t);
                                 if t=n-1 then so:=i;
                            end;

                     if t=n-1 then sx(a[so],a[n div 2+1]);
                     t:=0;
                end;
            for i:=1 to n-1 do
                for j:=i+1 to n do
                    begin
                         if (i<so) and (a[i]=a[j]) then sx(a[j],a[n+1-i]);
                         if (i>so-1) and (a[i]=a[j]) then sx(a[j],a[n-i+1]);
                    end;
            writeln('Sau khi bien doi day nhu sau:');
            for i:=1 to n do write(a[i]:3);
       end
    else writeln('Day nay khong co kha doi xung');
    readln;
end.

Bài 4: Dãy số tự nhiên a1;a2;…;ak được gọi là hạnh phúc thỏa mãn các điều kiện sau:
  +) Dãy trên là một dãy giảm dần.
  +) Với mọi i ai hoặc là số nguyên tố hoặc phải là ước của một trong các số a1;a2;…;ai.
Ví dụ: 8,7,5,4,3,2,1 là dãy số hạnh phúc ( với n=8 dãy số hạnh phúc có 7 phần tử).
Yêu cầu hãy viết chương trình nhập vào một số tự nhiên N từ bàn phím và in ra màn hình một dãy số hạnh phúc càng dài càng tốt với số hạng đàu tiên là N.
Bài giải:
uses crt;
type mang=array[1..100] of integer;
var a,b:mang;
   i,n,k:integer;
(*****)
function snt(n:integer):boolean;
var i:integer;
begin
    snt:=false;
    i:=2;
    while (n mod i<>0) and (i<n) do i:=i+1;
    if n<>i then exit;
    snt:=true;
end;
(*****)
function US(b:mang;k,i:integer):boolean;
var j,dem:integer;
begin
    US:=false;
    dem:=0;
    for j:=1 to k do
        if b[j] mod i=0 then inc(dem);
    if dem=0 then exit;
    US:=true;
end;
(*****)
begin
clrscr;
      write('Nhap n =');readln(n);
      a[1]:=n;
      k:=1;
      for i:=n-1 downto 1 do
          if snt(i) or US(a,k,i) then
             begin
                  k:=k+1;
                  a[k]:=i;

             end;
      writeln('Day so hanh ]phuc voi so dau tien ',n,' co ',k,' phan tu:');
      for i:=1 to k do
          write(a[i]:3);
readln;
end.

Bài 5: Trong một dãy số, các phần tử bằng nhau liên tiếp được gọ là 1 mặt bằng của dãy. Mặt bằng lớn nhất là mặt bằng của dãy có số phần tử nhiều nhất. Cho dãy số nguyên n. Tìm mặt bằng lớn nhất.
Bài giải:
uses crt;
var a:array[1..100] of integer;
   i,n,j,vt,dem,max,tong:integer;
begin
clrscr;
      tong:=0;
      dem:=0;
      max:=1;
      write('Nhap n:');readln(n);
      for i:=1 to n do
          begin
               write('Nhap a[',i,']:');
               readln(a[i]);
          end;
      for j:=1 to n do
      begin
           for i:=j to n do
           begin
                tong:=tong+a[i];
                dem:=dem+1;
                if tong/dem=a[i] then
                if dem>max then
                begin
                     max:=dem;
                     vt:=j
                end;
           end;
           tong:=0;
           dem:=0;
      end;
      if max<>0 then
         begin
              writeln('Do dai cua MBLN:',max);
              write('Vi tri:',vt);
         end
      else write('Ko co.');
readln;
end.

Bài 6: Ở một vương quốc nọ có một ông vua rất hung ác. Ông ta quyết định cho n người tự sát tập thể. Họ đứng thành một vòng tròn và người thứ m tự sát, tính thứ tự theo một chiều nào đó, chẳng hạn chiều kim đồng hồ. Khi một người ngã xuống thì vòng tròn thu hẹp lại và đếm thứ tự người còn lại bên cạnh để xác định người tự xác tiếp theo. Nhập 2 số tự nhiên n và m, liệt kê thứ tự từng người bị giêt.
VD: với n=9, m=5 thì thứ tự là: 5, 1, 7, 4, 3, 6, 9, 2, 8.
Bài giải:
uses crt;
var a:array[1..100] of integer;
   n,m,i,k,t,d,j:integer;
begin
    clrscr;
    write('So nguoi tu sat:');readln(n);
    write('Nguoi tu sat dau tien o vi tri:');readln(m);
    k:=0;
    d:=m-1;
    writeln('Thu tu nguoi tu sat:');
    for i:=1 to n do
        begin
             inc(k);
             a[k]:=i;
        end;
    for i:=1 to n do
        begin
             write(a[m]:5);
             t:=k;
             k:=0;
             for j:=1 to t do
                 if a[j]<>a[m] then
                    begin
                         inc(k);
                         a[k]:=a[j];
                    end;
             if m=t then m:=1;
             m:=m+d;
             while (m>k) and (k<>0) do m:=m-k;
        end;
    readln;
end.
Về Đầu Trang Go down
Xem lý lịch thành viên http://forumpascalvanlang.forumvi.com
 
Giải các bài toán đặc biệt về mảng một chiều
Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang 
Trang 1 trong tổng số 1 trang
 Similar topics
-
» [MF/DVDrip] The Warrior's Way (Con Đường Chiến Binh) (2010)
» Cuối tuần vui vẻ
» TRANG THƠ CHẾ LAN VIÊN
» 7 cái cột mà 15 cái võng
» Vóc dáng quê hương

Permissions in this forum:Bạn không có quyền trả lời bài viết
Diễn đàn tin học Văn Lang - Vạn Ninh :: Bài tập :: Mảng :: Mảng một chiều-
Chuyển đến