Trang 2 / 2 FirstFirst 12
Hiển thị kết quả từ 11 đến 20 / 20
  1. #11
    Tham gia
    02-10-2009
    Bài viết
    2
    Like
    0
    Thanked 0 Times in 0 Posts
    Quote Được gửi bởi nkvuong View Post
    Để bài đúng là như thế này
    Dãy số nguyên dương a1, a2, ..., an được gọi là DÃY SỐ HẠNH PHÚC nếu nó thỏa mãn các điều kiện sau:
    + Là dãy số giảm dần.
    + Với mỗi ai với i > 1 thì ai hoặc là số nguyên tố hoặc là ước của một trong các số từ a1 đến ai-1.
    Lập trình nhập từ bàn phím số nguyên dương N <= 10000 sau đó đưa ra màn hình dãy số hạnh phúc dài nhất bắt đầu từ N.

    Vì dãy số phải bắt đầu từ N nên có thể CM nếu ai ko nguyên tố thì phải là ước của N. Vì dãy giảm dần nên for trâu là được.
    d:=0;
    For i:=N downto 1 do
    if (nto(i)) or ((n mod i) =0) then
    begin inc(d); a[d]:=i; end;
    cái đề bài theo mình hiểu thì ko phải là ước của n đâu. VD: n=21 , a[i]=10, nhận thấy 5 là ước của 10 nhưng ko là ước 21.

  2. #12
    Tham gia
    15-09-2009
    Bài viết
    3
    Like
    0
    Thanked 1 Time in 1 Post
    bạn mrvuongpro nói vậy là sai rồi. Theo tui hiểu ở đây thì việc ai hoặc là số nguyên tố hoặc là ước của a1 đến ai-1 có nghĩa là ai hoặc la ước của a1 hoặc là số nguyên tố.
    Nhưng bài giải của bạn nkvuong là không hề đúng. Giả sử số N = 19 thì theo cách của bạn thì dãy dài nhất là: 19 17 13 11 7 5 3 2 1 (chỉ có 9 số) mà dãy dài nhất đáng ra phải là: 18 17 13 11 9 7 6 5 3 2 1 (có những 11 số)

    [=========> Bổ sung bài viết <=========]

    đây là bài của mình làm:
    program dshp;
    uses crt;
    const max = 10000;
    var
    N, i, a, c, d, e, S: Integer;
    b: array[1..max] of Integer;

    function snt(n: Integer): Boolean;
    var
    i: Integer;
    begin
    if n = 1 then
    begin
    snt := False;
    Exit;
    end
    else
    for i := 2 to n div 2 do
    if n mod i = 0 then
    begin
    snt := False;
    Exit;
    end;
    snt := True;
    end;

    begin
    clrscr;
    repeat
    Write('Nhap so N la: '); Readln(N);
    until N > 0;
    Write('Day so la:');
    if N = 1 then
    begin
    write(N);
    Readln;
    Exit;
    end
    else
    for a := N downto 2 do
    begin
    c := 0;
    d := 0;
    for i := a + 1 to N do
    if snt(i) = True then inc(c);
    for i := 2 to a do
    if (a mod i = 0) and (snt(i) = False) then inc(d);
    b[a] := d - c;
    end;
    S := b[2];
    for a := 3 to N do
    if b[a] > S then S := b[a];
    for a := 2 to N do
    if b[a] = S then e := a;
    Write(' ', e);
    for i := e - 1 downto 1 do
    if (snt(i) = True) or (e mod i = 0) then Write(' ', i);
    Readln;
    end.
    Về ý tưởng thì đúng rồi nhưng có đoạn
    S := b[2];
    for a := 3 to N do
    if b[a] > S then S := b[a];
    for a := 2 to N do
    if b[a] = S then e := a;
    Write(' ', e);
    mình vẫn phân vân không biết có đúng không, chẳng biết có lúc nào tồn tại 2 số mà hiệu của số ước số không nguyên tố của số đấy với số số nguyên tố nằm trong khoảng từ số đấy đến N không? Ai pro sửa cho mình đoạn đấy với.
    Được sửa bởi thinh94 lúc 22:01 ngày 06-10-2009 Reason: Bổ sung bài viết

  3. #13
    Tham gia
    24-07-2008
    Location
    quang ngai
    Bài viết
    35
    Like
    0
    Thanked 0 Times in 0 Posts
    Bài này không quá phức tạp mà.
    Ước của ước của N cũng là ước của N.
    Số nguyên tô khong có ước.
    => Dãy hạnh phúc là các ước của N là các số nguyên tố nhỏ hơn N.

    Nkvuong làm đúng rồi mà.
    Mà bài này cũng có người hỏi rồi này.
    http://www.ddth.com/showthread.php?t=161218

  4. #14
    Tham gia
    15-09-2009
    Bài viết
    3
    Like
    0
    Thanked 1 Time in 1 Post
    Nếu bạn đọc đề không cẩn thận thì sẽ không để ý là nó bắt in dãy dài nhất với a1 không vượt quá N chứ không phải là a1 phải bằng N. Tui đã nói lí do tại sao a1 có thể không phải = N rồi. Đề nghị bạn neiht1992 đọc bài viết của người khác cho kĩ rồi hãy phát biểu.

  5. #15
    Tham gia
    26-09-2009
    Bài viết
    1
    Like
    0
    Thanked 0 Times in 0 Posts
    Hic, em cũng có 1 đề thi cấp quận mà nó định nghĩa cái dãy số hạn phúc khác cơ. Bác nào nhiệt tình chỉ giúp em cách làm (càng dễ hiểu càng tốt, vì em còn gà mờ lém) thì em cám ơn nhìu lắm ^^
    Bài 2: Dãy số hạnh phúc
    Dãy a gồm N chữ số gọi là dãy số hạnh phúc nếu tồn tại số K sao cho (1=<k<n):
    Tổng các phần tử a1+a2+…+ak bằng tổng các phần tử Ak+1+…aN
    Yêu cầu: Hãy kiểm tra xem dãy gồm N chữ số cho trước có phải là dãy hạnh phúc hay ko, nếu có hãy đưa ra giá trị k nhỏ nhất thỏa điều kiện trên.
    Dữ liệu: Vào từ file văn bản Ticket.inp
    • Dòng đầu chứa số N (1=<N=<1000)
    • Dòng thứ hai chứa các số A1, A2,…An. Hai số dc ghi cách nhau bởi khoảng trắng
    Kết quả: Ghi ra file văn bản Ticket.out số k tìm dc. Trong trường hợp dãy chữ số ko thỏa tính chất dãy hạnh phúc ghi ra số 0.
    Ví dụ:
    Ticket.inp Ticket.out
    10
    6 4 9 1 0 0 3 2 7 8 4
    Em là thành viên mới vô, hân hạnh dc làm quen với mọi người và mong mọi người giúp đỡ, em còn 1 số bài nữa em sẽ post sau, thanks mọi người ^^

  6. #16
    Tham gia
    23-06-2009
    Location
    Huyện Gia Bình - Tỉnh Bắc Ninh
    Bài viết
    323
    Like
    0
    Thanked 4 Times in 4 Posts
    Quote Được gửi bởi kaname kuran View Post
    Bài :
    Dãy số hạnh phúc
    Dãy số tự nhiên a1,a2,...ak được gọi là dãy số hạnh phúc nếu
    _Dãy trên là dãy giảm dần với mọi i>1,a[i] hoặc là snt hoặc là ước chung các số và in ra 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 chưa rõ ràng. Bạn viết đề bài cho rõ hơn được không

    [=========> Bổ sung bài viết <=========]
    Được sửa bởi lehang_gb1 lúc 16:14 ngày 08-10-2009 Reason: Bổ sung bài viết

  7. #17
    Tham gia
    04-10-2009
    Bài viết
    3
    Like
    0
    Thanked 0 Times in 0 Posts
    Quote Được gửi bởi thinh94 View Post
    bạn mrvuongpro nói vậy là sai rồi. Theo tui hiểu ở đây thì việc ai hoặc là số nguyên tố hoặc là ước của a1 đến ai-1 có nghĩa là ai hoặc la ước của a1 hoặc là số nguyên tố.
    Nhưng bài giải của bạn nkvuong là không hề đúng. Giả sử số N = 19 thì theo cách của bạn thì dãy dài nhất là: 19 17 13 11 7 5 3 2 1 (chỉ có 9 số) mà dãy dài nhất đáng ra phải là: 18 17 13 11 9 7 6 5 3 2 1 (có những 11 số)
    Mình nghĩ bác hiểu sai đề bài rồi. Dãy phải bắt đầu từ N, mà dãy của bác lại bắt đầu từ N-1.

    Chứng minh thuật toán đúng thì vô cùng đơn giản. Dãy là giảm dần nên For ngược. Bắt đầu là N, sau đó các số sau hoặc là nguyên tố, hoặc là ước của N, VD ai là ước của a2 mà a2 lại là ước của N nên ai là ước của N. Số nguyên tố thì chỉ có ước là 1 và chính nó nên ko phải lo số sau có phải là ước của số nguyên tố trước đó hay không. Bài này code chỉ 10 dòng là hết

  8. #18
    Tham gia
    01-10-2009
    Bài viết
    5
    Like
    0
    Thanked 0 Times in 0 Posts
    Oài !Cho mình hỏi cái bài này nhák .Mình học đội tuyển wận ,ông thầy đội tỉn đố cái bài này .Theo như thằng bạn nói thì kết hợp xóa trùng và hoán vị còn các bác thì seo cin cho em lời giải đáp tận tình .Thanks nhìu !!
    cho một dãy gồm N (N<=100) số nguyên dương a1,a2,...an đôi một khác nhau ,giá trị mỗi số không vượt quá 10000 .Một dãy con được tạo từ dãy đã cho bằng cách chọn ra một số phần tử trong dãy đã cho đó nhưng phải giữ đúng thứ tự ban đầu.Một dãy con gọi là "dãy con nguyên tố "nếu hai phần tử bất kì nằm cạnh nhau trong dãy con đó đều nguyên tố cùng nhau .
    VD:N=10
    5 7 9 15 12 4 6 13 8 21
    xuất :5 7 9 4 13 8 21

  9. #19
    Tham gia
    02-12-2005
    Location
    Đà Nẵng
    Bài viết
    167
    Like
    0
    Thanked 0 Times in 0 Posts
    Quote Được gửi bởi kaname kuran View Post
    Oài !Cho mình hỏi cái bài này nhák .Mình học đội tuyển wận ,ông thầy đội tỉn đố cái bài này .Theo như thằng bạn nói thì kết hợp xóa trùng và hoán vị còn các bác thì seo cin cho em lời giải đáp tận tình .Thanks nhìu !!
    cho một dãy gồm N (N<=100) số nguyên dương a1,a2,...an đôi một khác nhau ,giá trị mỗi số không vượt quá 10000 .Một dãy con được tạo từ dãy đã cho bằng cách chọn ra một số phần tử trong dãy đã cho đó nhưng phải giữ đúng thứ tự ban đầu.Một dãy con gọi là "dãy con nguyên tố "nếu hai phần tử bất kì nằm cạnh nhau trong dãy con đó đều nguyên tố cùng nhau .
    VD:N=10
    5 7 9 15 12 4 6 13 8 21
    xuất :5 7 9 4 13 8 21
    Mình nghĩ thế này .
    Viết 1 hàm kiểm tra ước
    Đầu tiên cho 1 vòng for các cá thể
    Kiểm tra 2 số kề nhau có ước chung bé nhất ko . Nếu trả về True thì xuất ra
    Để tránh bị trùng khi xuất nên lưu giá trị vào 1 mảng rồi loại giá trị trùng
    Cơ bản là thế này
    Code:
    #include<iostream.h>
    #include<conio.h>
    #include<math.h>
    int uc(int a, int b)
    {   if(a==0||b==0) return a+b;
    while(a!=b)
    { if (a>b) a=a-b;
    else b=b-a;
    
    } return a;
    }
    
    int m[100],m1[100],n,k;
    void nhap(  int &n)
    { cout<<" Nhap N \n";
        cin>>n;
       for(int i = 0 ; i <n; i ++)
        cin>>m[i];
    
    }
    void xuat(int k )
        { for(int j = 0 ; j < k; j ++ )
        if(m1[j]!=0)
         cout<<m1[j]<<"  ";
        }
    
    void process()
    {  k = 0 ;  for (int i = 0 ; i <n; i ++)
    
      if (uc(m[i],m[i+1])==1)
      {   m1[k]=m[i]; k++; m1[k]=m[i+1]; k++;
      }
         for(i = 0 ; i < k;i++ ) if (m1[i]==m1[i+1])  m1[i]=0;
          xuat(k);
    }
    
    int main()
    
    {   nhap(n);
        process();
    
        getch();
    
    }
    Được sửa bởi thanhbinh777 lúc 22:11 ngày 12-11-2009

  10. #20
    Tham gia
    01-10-2009
    Bài viết
    5
    Like
    0
    Thanked 0 Times in 0 Posts
    àh cảm ơn bạn !Nhưng cho mình hỏi bạn viết bài này theo turbo pascal hay là chương trình khác dậy ????

Trang 2 / 2 FirstFirst 12

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
  •