1. Tuyển Mod quản lý diễn đàn. Các thành viên xem chi tiết tại đây

Bài toán chuỗi số vòng tròn - gấp quá, em chỉ hỏi trong 24h thôi

Chủ đề trong 'Toán học' bởi fatmailer, 15/01/2007.

  1. 0 người đang xem box này (Thành viên: 0, Khách: 0)
  1. fatmailer

    fatmailer Thành viên mới

    Tham gia ngày:
    12/02/2005
    Bài viết:
    2.266
    Đã được thích:
    0
    Bài toán chuỗi số vòng tròn - gấp quá, em chỉ hỏi trong 24h thôi

    Mong các cao thủ chỉ giáo em cái giải thuật

    Em có cái vòng tròn số gồm các số nguyên 0 - 9, lưu trong mảng 1 chiều. Muốn viết lại chuỗi để bắt đầu từ cụm số nhỏ nhất, vậy nên làm thế nào?

    VD: 0 5 8 3 0 1 7 biến thành 0 1 7 0 5 8 3
    Lưu ý rằng vì nó vòng tròn nên 0 1 0 3 2 0 sẽ thành 0 0 1 0 3 2

    (BT nguyên bản là BT xử lý chain code)

    Em cần gấp, mong các anh em sớm tương trợ.
    Thanks
  2. dangiaothong

    dangiaothong Thành viên rất tích cực

    Tham gia ngày:
    10/09/2005
    Bài viết:
    4.854
    Đã được thích:
    7
    Theo ý mình thì bạn nên khai thêm 1 mảng 1 chiều 20 số, Sau đó sắp xếp các số liên tục từ mảng đã cho vào mảng mới sao cho từ a[0] đến a[9] ta luôn tạo được vòng với 9 số tiếp theo. Mọi thủ thuật tiến hành trên mảng này, ổn chứ?
  3. long40d

    long40d Thành viên rất tích cực

    Tham gia ngày:
    14/06/2002
    Bài viết:
    1.028
    Đã được thích:
    0
    Khởi tạo:
    Flag là cờ để kết luận cụm số nhỏ nhất là duy nhất. giá trị ban đầu là TRUE
    Số chữ số là số lượng chữ số để hợp thành cụm số nhỏ nhất. giá trị ban đầu là 0
    Xử lý:
    Trong khi flag còn đúng
    Số chữ số tăng lên 1
    Vòng lặp đầu tìm cụm số nhỏ nhất ứng với số chữ số.
    Vòng lặp thứ hai kiểm tra xem cụm số trên là duy nhất hay không
    Nếu có duy nhất 1 cụm số chuyển flag về FALSE
    Kết luận.
  4. tungsin_tpg

    tungsin_tpg Thành viên rất tích cực

    Tham gia ngày:
    24/11/2003
    Bài viết:
    4.584
    Đã được thích:
    0
    gud job
    quang bèo dẮt toàn nhè
  5. fatmailer

    fatmailer Thành viên mới

    Tham gia ngày:
    12/02/2005
    Bài viết:
    2.266
    Đã được thích:
    0
    Ă"ng 'i ch- khĂc chơi 'i
    *************************************************************

    BĂo cĂo cĂc bĂc, em nTp coursework r"i nĂn giờ ch? lĂ cao 'Ăm. HĂm 'Ă em cĂ vĂo nhưng ch? 'ọc 'c bĂi bĂc GiĂo thĂng, tiếc lĂ gợi Ă của bĂc khĂng hữu Ăch lắm. Gợi Ă của bĂc hơi sơ lược; thĂm nữa mảng của em v'n 'Ă dĂi, gấp 'Ăi lĂn thĂ toi em.
    Về gợi Ă của bĂc Long - Cho khĂng 'Ă (40d), rất sĂt v>i những gĂ em thử nghi?m. Em cĂ tiến hĂnh thử nhưng vĂ khĂng cĂ nhiều thời gian nĂn chưa 'i sĂu 'ược (em cĂn vĂi bĂi nữa mĂ). KhĂng kc 'i. Ban 'ầu step = 0, cứ sum(Flag) >1 (=1 chĂnh lĂ 'Ăch) thĂ em cĂn bơm step lĂn vĂ so sĂnh.
    Cu'i cĂng, em ch? chạy mảng v>i giải thuật so sĂnh, tĂm min vĂ cập nhật cĂc giĂ tri vĂi chu-i nhưng cĂ vĂi cĂi min nằm Y cu'i lĂ lại l-i. Em chĂn vĂ vTi nĂn bỏ dY, 'ến h vẫn chưa lĂm xong.
    BĂc nĂo cĂ nhĂ hứng vĂ ti?n thời gian ngoĂy cho em cĂi Runable code 'f mY rTng tầm mắt cĂi. NgĂn ngữ thĂ loại nĂo cũng OK, pseudo code cũng 'c nhưng chi tiết tĂ em biến nĂ vĂo Matlab.
    Thanks tất cả cĂc bĂc 'Ă cĂng giĂp 'ỡ
  6. long40dphay

    long40dphay Thành viên mới

    Tham gia ngày:
    09/03/2003
    Bài viết:
    87
    Đã được thích:
    0
    Đoạn cuối bạn sử dụng phép chia lấy dư là được
    ví dụ như số chữ số là 7, tức Step =7
    (i+Step) mod n, như vậy khi tổng i+Step vượt quá dãy số, nó sẽ tự động quay lại từ đầu
  7. dangiaothong

    dangiaothong Thành viên rất tích cực

    Tham gia ngày:
    10/09/2005
    Bài viết:
    4.854
    Đã được thích:
    7
    Tớ tưởng mảng 10 số thì lấy đâu ra dài. Nếu bạn thao tác với các mảng lớn thì có thể không cần khai thêm mảng, các lệnh có thể biến đổi đi tí chút để không cần khai thêm mảng mà vẫn có thể xét được vòng.
    Tớ chưa làm bài này nhưng có suy nghĩ thô thiển thế này:
    1. Tìm chữ số nhỏ nhất mảng và số chữ số nhỏ nhất
    2. So sánh các vòng số có chữ số đầu tiên bắt đầu bằng số nhỏ nhất.
  8. Dien_Quyhoach_2_0

    Dien_Quyhoach_2_0 Thành viên mới

    Tham gia ngày:
    20/03/2004
    Bài viết:
    329
    Đã được thích:
    0
    function quang=fatmaider(a)
    Step=0;
    flag=true;
    n=length(a);
    while flag
    Sophantu=0;
    Step=Step+1;
    min=0;
    heso=1;
    for i=1:Step
    min=min+a(Step+1-i)*heso;
    heso=heso*10;
    end
    for i=1:n
    mi=0;
    heso=1;
    for j=i:Step+i-1
    mi=mi+a(mod(Step+i+i-j-2,n)+1)*heso;
    heso=heso*10;
    end
    if mi<min
    min=mi
    end
    end
    for i=1:n
    mi=0;
    heso=1;
    for j=i:Step+i-1
    mi=mi+a(mod(Step+i+i-j-2,n)+1)*heso;
    heso=heso*10;
    end
    if mi==min
    Sophantu=Sophantu+1;
    end
    end
    if Sophantu==1
    flag=false;
    end
    end
    for i=1:n
    mi=0;
    heso=1;
    for j=i:Step+i-1
    mi=mi+a(mod(Step+i+i-j-2,n)+1)*heso;
    heso=heso*10;
    end
    if mi==min
    Sophantu=i
    end
    end
    for i=1:n
    b(i)=a(mod(i+Sophantu-2,n)+1);
    end
    quang=b;
  9. royalgia

    royalgia Thành viên mới

    Tham gia ngày:
    25/03/2006
    Bài viết:
    1.354
    Đã được thích:
    0
    Sao code của bác căn lề thẳng một lèo nhìn chẳng giống mấy bác bên APTECH gì cả.
    To fatmailer: Vụ này dùng đệ quy có dc không bác?
    Chúc các bác vui khoẻ, có ích
  10. tungsin_tpg

    tungsin_tpg Thành viên rất tích cực

    Tham gia ngày:
    24/11/2003
    Bài viết:
    4.584
    Đã được thích:
    0
    là?m như bàc long40 theo em nghĩ là? ngf́n nhẮt rĂ?i, mà? hợp lỳ

Chia sẻ trang này