Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 18 kết quả

Đề tài: [ Solved ]Các thuật giải ngẫu hứng.

  1. #1
    Ngày gia nhập
    10 2006
    Nơi ở
    Hà Nội
    Bài viết
    146

    Mặc định [ Solved ]Các thuật giải ngẫu hứng.

    Trong mặt phẳng cho n+1 điểm .
    Tìm một điểm trong số n+1 điểm đã cho sao cho điểm này là tâm của một hình tròn bán kính a( cho trước) chứa nhiều điểm còn lại nhât .
    Code:
    void timdiem(){
    int i,j,k,a[N],max=0;   
    for(i=0;i<=n;i++)
            for(j=0;j<=n;j++)
              {
                if(d[i][j]<=a) a[i]++; //d[i][j] là khoảng cách từ điểm i đến điểm j
              }
     for(i=0;i<=n;i++)
     {
       if(max<a[i]) {max=a[i];k=i;}
    }
    printf("/nDiem can tim la a[k]")
    }

  2. #2
    Ngày gia nhập
    10 2006
    Nơi ở
    Hà Nội
    Bài viết
    146

    Thuật giải tìm số hoàn hảo:
    Code:
      void so_hoan_hao()
        {
           unsigned long s,n,i,j;
           printf("\nNhap so N = ");
           scanf("%ld",&n);
           for(i=2;i<=n;i++)
    	 {
    	  s=0;
    	  for(j=1;j<i;j++)
    	    if(i%j==0) s=s+j;
    	  if(s==i)printf("\n%ld",s);
    	 }
         //getch();
       }
    Còn đây là VB code do bạn Hailoc12 post bên Caulacbovb
    Code:
    Function sohoanhao(ByVal k As Long) As Boolean
    Dim i%, s%
    s = 0
    i = 1
    Do While (i <= k \ 2) And (s < k)
       If (k Mod i) = 0 Then s = s + i
       i = i + 1
    Loop
    sohoanhao = (s = k)
    
    
    End Function
    
    Private Sub Form_Load()
    Dim j%
    For j = 1 To 10000
       If sohoanhao(j) Then Debug.Print j
    Next j
    End Sub

  3. #3
    Ngày gia nhập
    10 2006
    Nơi ở
    Hà Nội
    Bài viết
    146

    Thuật toán vẽ đường tròn:
    Nội dung thuật toán là:
    -Đầu tiên bạn cần có 1 cái tâm và tọa độ của nó.
    -Thứ hai bạn chỉ cần vẽ 1/8 cung tròn thôi rồi bạn lấy đối xứng qua các trục tọa độ để được hình tròn hoàn thiện.
    -Về thuật toán vẽ 1 cung tròn, bạn giả sử đã vẽ được điểm (x,y), cần vẽ tiếp điểm (x+dx,y+dy) kế tiếp đó.Có 4 TH xảy ra với điểm tiếp theo này, ta chỉ xét 1 TH là điểm này có dx,dy>0
    thế thì chúng ta dựa vào phương trình đương tròn x2+y2=R2
    thiết lập ra các điều kiện ràng buộc của dx,dy và tọa độ của điểm tiếp theo.
    Theo thuật toán ta nên lấy 1 điêm có tọa độ nguyên thỏa mãn các tính chất gần với điểm cần vẽ.
    Các bạn tự tìm hiểu nhé.
    -Cứ như thế cho đến khi vẽ hết cung tròn thì dừng lại.
    Đây là code của thuật toán Midpoint:
    Code:
    // Ve 8 diem doi xung
    void Put8Pixel(int x, int y)
    {
    putpixel(x, y, Color);
    putpixel(y, x, Color);
    putpixel(y, -x, Color);
    putpixel(x, -y, Color);
    putpixel(-x, -y, Color);
    putpixel(-y, -x, Color);
    putpixel(-y, x, Color);
    putpixel(-x, y, Color);
    } // Put8Pixel
    void CircleMidPoint (int R)
    {
    int x, y;
    x = 0;
    y = R;
    Put8Pixel(x, y);
    p = 1 - R; // 5/4-R
    while (x < y)
    {
    if (p < 0)
    p += 2*x + 3;
    else
    {
    p += 2*(x -y) + 5;
    y--;
    }
    x++;
    Put8Pixel(x, y);
    }
    } // CircleMidPoint

  4. #4
    Ngày gia nhập
    10 2006
    Nơi ở
    Hà Nội
    Bài viết
    146

    Thuật toán điền số vào ô vuông:
    Để có thể điền các số vào ma trận n*n (n lẻ) sao cho mỗi hàng ngang, chéo, dọc đều có tổng bằng nhau, ta dùng thuật toán sau:
    - Đầu tiên, ta xuất phát 1 ở bên phải ô trung tâm.
    - Các số tăng dần 2, 3, ... đều đi chéo lên phía trên. Sau khi đánh số:
    + Nếu n chia hết cho số đó thì số tiếp theo sẽ nằm bên phải cách 1 ô.
    + Nếu gặp biên thì đi qua biên ngược lại.
    VD: Ma trận 3x3
    ======
    | 2| 7| 6|
    ======
    | 9| 5| 1|
    ======
    | 4| 3| 8|
    ======
    1/ đánh dấu bên phải ô trung tâm.
    2/ Gặp biên phải: qua bên trái, lên một "nấc".
    3/ Gặp biên trên, xuốnng dưới, qua phải.
    4/ 3 chia hết cho 3: 4 đi qua phải 2 ô, găp biên phải, qua trái.
    5/ Đi chéo.
    6/ Đi chéo.
    7/ 6 chia hết cho 3: đi phải 2 ô gặp biên phải, qua trái.
    8/ Đụnmg biên trên, xuống dưới
    9/ Đụng biên phải, qua trái.

    Có một người nêu ra thuật toán sau:
    1/ Đánh số 1 tại ô giữa hàng đầu
    2/ Sử dụng công thức: từ ô vừa đánh số, ta lên 1, phải 1, đánh số tiếp theo, theo thứ tự tăng dần
    3/ Nếu đụng biên trên thì bay xuống hàng cuối
    4/ Nếu đụng biên phải thì bay qua biên trái
    5/ Nếu ô vừa đến đã có số sẵn rùi thì đánh vào ô nằm ngay bên dưới ô vừa đánh.
    6/ Kết thúc dzui dzẻ
    Khi thực hiện xong thì nó như thế này (n=3)
    ======
    | 8| 1| 6|
    ======
    | 3| 5| 7|
    ======
    | 4| 9| 2|
    ======
    Các bạn nghĩ sao?

  5. #5
    Ngày gia nhập
    10 2006
    Nơi ở
    Hà Nội
    Bài viết
    146

    Mặc định Bài toán hình vuông!

    Cho bài toán như sau:
    Cho hình vuông 5*5
    Hãy tìm cách điền các chữ số từ 0->9 vào các ô sao cho các ĐK sau đc thỏa:
    1.Dọc theo hàng từ trái sang phải ta nhận đc 5 số nguyên tố
    2.Dọc theo cột từ trên xuống dưới ta cũng được 5 SNT
    3.Dọc theo hai đường chéo từ trái sang phải ta cũng đc 2 số nguyên tố
    4. Tổng tất các chữ số của các số nguyên tố trên đều là một số s cho trước(ví dụ s= 18)
    5. Hai nghiệm dc gọ là khác nhau hai hình vuông đó có hai hình vuông đơn vị cùng vị trí khác nhau.

    thuật toán giải bài này như sau:
    Chia bài toán thành 2 bài toán con
    1. Tìm tất cả các số nguyên tố có 5 chữ số có tổng các chữ số của nó bằng s, rồi lưu vào 1 mảng gọi là mảng nto[];
    2.Chọn chiến lược sắp xếp các số nto trên vào hình vuông
    thao tác:
    -------------------
    | 1 | 2 | 3 | 4 | 5 |
    +-----------------
    | 6 |13 |14|12|15|
    +-----------------
    | 7 |16 |11|18|19|
    +-----------------
    | 8 |10 |20|22|23|
    +-----------------
    | 9 |17 |21|24|25|

    H1 : lấy 1 số từ mảng lắp vào hàng 1 được các ô từ 1->5
    C1: lấy 1 số từ mảng lắp vào vột 1 với điều kiện có ô 1 trùng đc các ô 6->9
    D1: lấy một số từ mảng lắp vào đường chéo 1 với ĐK trùng ô 9 và ô 5 đc các ô 10->12
    H2: ..........................lắp vào hàng 2 với ĐK trùng ô thứ hai cột 1 với ĐK(6,12) đc 13->15
    C2...... lắp vào cột 2 với ĐK (2,13,10) đc 16,17
    H3 ................hàng 3 ........(7,16,11) đc 18,19
    C3 ................cột 3 ........ (3,14,11) Đc 20,21
    H4 ................hàng 4 ........(8,16,20) Đc 22,23
    C4 ................cột 4 ..........(4,12,18,22) Đc 24
    H5 ................ hàng 5 .......(9,17,21,24) Đc 25
    Kiểm tra D2 và C5 nếu là số nguyên tố thuộc mảng thì kết thúc và chỉ ra 1 nghiệm
    Nếu không thì quay lui lại bước trên để làm tiếp với số nguyên tố khác
    Bài này làm theo thuật toán quay lui.
    Chúc vui vẻ

  6. #6
    Ngày gia nhập
    10 2006
    Nơi ở
    Hà Nội
    Bài viết
    146

    Mặc định Bài toán tìm quả cân

    có 12 quả cân trông rất giống nhau nhưng thực ra trong đó có 1 quả nhẹ hơn 1 chút. Có 1 đòn cân
    Hãy chỉ ra thuật toán để sau 3 lần cân thì chỉ ra được quả cân nhẹ hơn kia.?
    Nêu ra để anh em giải cho vui. Hôm sau nêu đáp án.
    Chúc vui nha!

  7. #7
    Ngày gia nhập
    10 2006
    Nơi ở
    Hà Nội
    Bài viết
    146

    Bài toán Các triết gia ăn cơm.
    Có 5 triết gia ngồi xung quanh trên 1 cái bàn tròn cách đều nhau, trước mặt các triết gia là 5 cái bát ăn cơm và ở giữa có 1 nồi cơm.
    Điều oái ăm là chỉ có 5 chiếc đũa để cách đều nhau giữa các triết gia (Nghĩa là hai bên cái bát thì có 2 chiếc đũa). một triết gia muốn ăn cơm thì thì phải có đủ hai chiếc đũa, tức là cùng một thời điểm hai triết gia ngồi cạnh nhau không thể cùng ăn cơm.
    Xem như các chiếc đũa như trong "đoạn nguy hiểm" hãy thiết lập chương trình để xử lí bài toán trên khi các triết gia có nhu cầu ăn cơm, để không gây xung đột giữa các triết gia.
    với giả sử rằng các triết gia chỉ đang đọc sách ngâm cứu, khi nào đói bụng thì ăn cơm.

  8. #8
    Ngày gia nhập
    10 2006
    Nơi ở
    Rừng Amazon
    Bài viết
    101

    Đố các bác.
    Em có 2 biến a và b. Không được phép khai báo thêm biến, làm sao để đổi chỗ giá trị 2 biến này cho nhau được?

  9. #9
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    REA là ở đâu vậy anh rongchaua, còn bài của em là lấy ý tưởng từ một tờ giấy gói xôi. he he

    Trích dẫn Nguyên bản được gửi bởi Tarzan
    Đố các bác.
    Em có 2 biến a và b. Không được phép khai báo thêm biến, làm sao để đổi chỗ giá trị 2 biến này cho nhau được?
    Cái khó, ló cái khôn. Hàm sau đây thay đổi cả chỗ và giá trị. He he
    Code:
    int swap(int *a,int*b)
    {
    	*a=*a+*b;
    	*b=*a-*b;
    	*a=*a-*b;
            return 0;
    }
    Còn mấy bài của PoPoPo cũng hay đó. Chỉ có trình bày lời giải hơi dài, mọi người cùng giải cho vui nhé.
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  10. #10
    Ngày gia nhập
    08 2006
    Bài viết
    19

    các bác thích bài toán thì có nè:
    số nguyên tố ghép:1 số được gọi là số nguyên tố ghép nếu nó được ghép lại từ 2 số nguyên tố liên tiếp nhau. VD 23= 2 ghép với 3..
    yêu cầu liệt kê 500 số nguyên tố ghép đầu tiên. Bài này em được thầy giao khi còn học cấp 3. làm bằng pascal, chạy 15ph mới xong

Các đề tài tương tự

  1. Tìm đường đi ngắn nhất bằng giải thuật tham lam?
    Gửi bởi Jindo trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 13-10-2010, 01:00 PM
  2. [ Solved ] Cấu trúc dữ liệu và giải thuật-Link List
    Gửi bởi Nemo_wf trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 22-09-2008, 12:40 PM
  3. [c++]Thuật giải tìm đường ngắn nhất
    Gửi bởi hoanglinh9466 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 9
    Bài viết cuối: 01-08-2008, 04:44 PM
  4. [ Solved ]Giải thuật Prim !
    Gửi bởi phubaby trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 23-04-2008, 11:07 AM
  5. [Solved]Lỗi cơ bản trong một thuật toán sắp xếp đơn giản
    Gửi bởi hacker_mubaohiem trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 21-03-2008, 06:35 PM

Quyền hạn của bạn

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