Biểu diễn bài toán cổ đại ra Excel bởi VBA

Liên hệ QC

HeSanbi

Nam Nhân✨Hiếu Lễ Nghĩa Trí Tín✨
Tham gia
24/2/13
Bài viết
2,382
Được thích
3,535
Giới tính
Nam
Tôi thấy trong giai thoại toán học có bài toán, chưa có lời giải
nay muốn GPE giúp đỡ biễu diễn ra Excel
Để mọi người trên GPE cùng nhau giải bài toán
Bài toán thế này:
Có vòng tròn chạy từ 1 đến số cho trước (giống đồng hồ), Ta phải loại bỏ số để tìm ra được số cuối cùng , phương pháp loại : cách một số bỏ đi một số bắt đầu từ số 1 theo vòng tròn liên tục
Luật chơi của bài toán: chỉ được tính nhẩm
Ví dụ:
Có 12 số từ 1 đến 12, Cách 1 bỏ 2, cách 3 bỏ 4,các số còn lại 1,3,5,7,9,11 , tiếp tục loại đi theo vòng tròn
,11 đã bỏ 12, tiếp tục 1 bỏ 3, 5 bỏ 7, 9 bỏ 11, các số còn lại ở vòng loại này là 1,5,9, vì 9 đã bỏ 11 (số cuối của vòng loại này, nên 1 bỏ 5 và 9 bỏ 1, vậy 9 là số còn lại.

Với 13 số 1 đến 13, khi loại còn lại 1,3,5,7,9,11, đến 13 sẽ bỏ 1
Vòng tròn đầu
1 2 3 4 5 6 7 8 9 10 11 12 13
Lặp nên 1 vòng mới sau khi đã loại
1 3 5 7 9 11 13 vì 13 là cuối vòng nên quay về loại số 1 để tiếp tục
13 bỏ 1, 3 bỏ 5, 7 bỏ 9, 11 bỏ 13
Có vòng mới còn 3 số
3 7 11
Tiếp tục sẽ là 3 bỏ 7, và 11 loại 3, số cuối cùng là 11
Nếu theo vòng tròn sẽ như thế này:
1 2 3 4 5 6 7 8 9 10 11 12/ 1 3 5 7 9 11/1 5 9/1 9/9
1 2 3 4 5 6 7 8 9 10 11 12 13 / 1 3 5 7 9 11 13 /3 7 11/ 3 11/11
(Ví dụ nằm ở Sheet VongTron)
Mong GPE giúp tạo một code để biễu diễn bài toán trên, khi thay đổi số cho trước thì code thực hiện.
Xin chân thành cảm ơn! (tôi có File bên dưới)
Một số kết quả để so sánh:
Với 500000 số cho kết quả là 474513
Với 56789 số là 48043
Với 656434 số là 264293
 

File đính kèm

  • LoaiVongTron.xlsm
    25.4 KB · Đọc: 18
Lần chỉnh sửa cuối:
Nếu bạn tìm ra được công thức thì bạn đã biết cách biểu diễn (theo từ bạn nói) / biện luận cho công thức đó

Nhưng rất tiếc là bài toán này (bài toán giết người bên cạnh bằng kiếm theo vòng tròn--> tìm vị trí đứng là người cuối cùng còn sống ) người ta giải rồi, và đưa công thức ngắn gọn và video giải thích biện luận đầy đủ. Mọi người không phải nhọc công làm chi.
http://m.soha.vn/cau-do-toan-hoc-na...hai-truong-hop-tuong-tu-20161123132313219.htm
Sau khi xem, công thức của tôi, còn nhanh và tối ưu hơn video này, cảm ơn Gió Đông tôi đã có cơ sở giải thích bài toán, ct của tôi nhẩm trong vòng 10 giây cho số có thể tính của bộ não
 
Upvote 0
http://m.soha.vn/cau-do-toan-hoc-na...hai-truong-hop-tuong-tu-20161123132313219.htm
Sau khi xem, công thức của tôi, còn nhanh và tối ưu hơn video này, cảm ơn Gió Đông tôi đã có cơ sở giải thích bài toán, ct của tôi nhẩm trong vòng 10 giây cho số có thể tính của bộ não

Thớt muốn khoe bài toán tính nhẩm của mình chứ đâu có liên quan gì đến Excel. Bây giờ mở Excel lên, gõ số liệu vào cũng đã 10 giây rồi. Máy tôi mở Excel lên lần đầu tiên cũng phải hơn 10 giây, sau đó mới là 1-2 giây.

(cũng may là mình nghi nghi từ đầu, thoát khỏi cảnh làm trò hề cho thớt)
 
Upvote 0
nếu ko dùng gươm mà dùng súng thì sao nhỉ ? sẽ xuất hiện trường hợp xuyên táo !
giờ người ta xử nhau bằng hàng nóng ko à ^^
 
Upvote 0
nếu ko dùng gươm mà dùng súng thì sao nhỉ ? sẽ xuất hiện trường hợp xuyên táo !
giờ người ta xử nhau bằng hàng nóng ko à ^^
Thấy chủ thớt cứ dùng từ "biểu diễn" là biết ý muốn khoe "con lợn cưới" rồi... mà anh. :)
----
Súng thì anh chọn loại nào ạ?
Súng ngắn, súng dài (ở GPE hay xài loại AK), súng bắn phát một hay bắn liên thanh?
Nếu mình chuyển qua dùng hạng nặng (bom, tên lửa chẳng hạn) thì mình chỉ cần thả/bắn vào gần gần cái "vòng tròn đó" là được. :D
 
Upvote 0
thể theo yêu cầu của 1 triệu 1 trăm lẻ 1 lời yêu cầu của các thành viên GPE , đề nghị bạn chủ thớt công khai bài tính nè ,
vì mọi người đã góp ý xây dựng rùi nên thiết nghĩ chủ thớt cũng nên đáp lại , ko là sau này bác bị cho vào tầm ngắm đó ^^
 
Upvote 0
thể theo yêu cầu của 1 triệu 1 trăm lẻ 1 lời yêu cầu của các thành viên GPE , đề nghị bạn chủ thớt công khai bài tính nè ,
vì mọi người đã góp ý xây dựng rùi nên thiết nghĩ chủ thớt cũng nên đáp lại , ko là sau này bác bị cho vào tầm ngắm đó ^^

Có chuyện đó nữa sao? Tôi đâu có thấy ai yêu cầu đâu?
Trừ phi nó có liên quan đến Excel, chứ hiện tại thì tôi chả thấy hứng với bài giải chút nào.
 
Upvote 0
Thớt muốn khoe bài toán tính nhẩm của mình chứ đâu có liên quan gì đến Excel. Bây giờ mở Excel lên, gõ số liệu vào cũng đã 10 giây rồi. Máy tôi mở Excel lên lần đầu tiên cũng phải hơn 10 giây, sau đó mới là 1-2 giây.

(cũng may là mình nghi nghi từ đầu, thoát khỏi cảnh làm trò hề cho thớt)
Hề gì ở đây anh VetMini, bài toán này phải chứng minh, có luận cứ, mới dám chắc chắng để đưa ra công thức, biết đâu có người nói ăn cắp ý tưởng, thì khổ, nhưng chưa chứng minh đc đành nhờ anh em GPE
 
Upvote 0
thể theo yêu cầu của 1 triệu 1 trăm lẻ 1 lời yêu cầu của các thành viên GPE , đề nghị bạn chủ thớt công khai bài tính nè ,
vì mọi người đã góp ý xây dựng rùi nên thiết nghĩ chủ thớt cũng nên đáp lại , ko là sau này bác bị cho vào tầm ngắm đó ^^
O (m) = ( m-2^n)*2 +1 dk: max( 2^n ) luôn luôn <= m (có từ năm 2009)
http://m.soha.vn/cau-do-toan-hoc-na...hai-truong-hop-tuong-tu-20161123132313219.htm, video này dùng kết quả để chứng minh, hoàn toàn không thỏa mãn bài toán
 
Lần chỉnh sửa cuối:
Upvote 0
Hề gì ở đây anh VetMini, bài toán này phải chứng minh, có luận cứ, mới dám chắc chắng để đưa ra công thức, biết đâu có người nói ăn cắp ý tưởng, thì khổ, nhưng chưa chứng minh đc đành nhờ anh em GPE

Sao bạn không tự chứng minh mà phải nhờ anh em trên đây làm cho bạn?
Còn bày đặt sợ người khác nói ăn cắp ý tưởng?
Bài mang tính chia sẽ hay khoe khoan tài công thức nhẩm?
 
Upvote 0
Hề gì ở đây anh VetMini, bài toán này phải chứng minh, có luận cứ, mới dám chắc chắng để đưa ra công thức, biết đâu có người nói ăn cắp ý tưởng, thì khổ, nhưng chưa chứng minh đc đành nhờ anh em GPE

Tôi là dân thống kê. Bạn chỉ cần đưa công thức lên đây tôi sẽ:
- Hoặc chứng minh được trường hợp sai của nó.
- Hoặc nếu khong chứng minh được sai thì tôi cũng xác định rằng khoảng 95% khả năng nó ra kết quả đúng.
Hai điều kiện trên có thể dùng Excel và VBA.
Nhưng muốn chứng minh đúng hoàn toàn thì phải giỏi toán số. Cái đó tôi thấy là khong liên quan gì đến Excel.
 
Upvote 0
Chỉ giỏi chém gió thôi

Chém gió hay không nói bây giờ cũng còn hơi sớm. Tôi đã đưa ra đề nghị test công thức ở bài #34 rồi. Đợi chủ thớt trả lời đã.

Tôi từng kiếm ăn bằng nghề kiểm soát quy trình. Tôi tin rằng mình biết cách test công thức.
Nếu chủ thớt còn ngại thì tôi chỉ cho cách test sơ khởi để tự test lấy. Sơ khởi có nghĩa là nếu ra sai thì kết luận công thức sai, bằng không thấy sai thì được khoảng 90% nhưng vẫn còn phải test đợt kế.
1. Dùng code ở bài #9 làm điểm mốc để so sánh.
2. So sánh kết quả của code này với kết quả công thức
3. Cách thức lấy dữ liệu test:
- test với 1, 2, 3, 4, 5, 24, 25, 35, 60, 99, 100 (những con số này có 1 vài điểm đặc biệt của chúng)
- test với hai số khá lớn: 32767 và 32768
- test với 2 số ngẫu nhiên bốc ra từ khoảng 10-100, 2 bốc ra từ 101-200, 2 bốc ra từ 1000-10000

Nhưng nếu chủ thớt còn mãi vòng vo thì quả là chém gió.

Anh giúp một code biểu diễn đi, để mọi người dựa vào bài biểu diễn để ngâm cứu
Code đã có ở bài #9 rồi. Bạn chứng minh là nó sai hoặc không ra giống kết quả của công thức mình thì tôi mới có hứng tiếp.
 
Upvote 0
Chủ topic mâu thuẫn từ đầu:

- Bài toán xưa chưa có lời giải
- Đến khi bài #21 chỉ ra đã có lời giải và biện luận đầy đủ thì--> lại nói: đã có công thức nhanh hơn và đã có cơ sở giải thích bài toán
minahnh0011 đã viết:
http://m.soha.vn/cau-do-toan-hoc-na...hai-truong-hop-tuong-tu-20161123132313219.htm
Sau khi xem, công thức của tôi, còn nhanh và tối ưu hơn video này, cảm ơn Gió Đông tôi đã có cơ sở giải thích bài toán, ct của tôi nhẩm trong vòng 10 giây cho số có thể tính của bộ não
- Nhưng sau đó lại
minahnh0011 đã viết:
Hề gì ở đây anh VetMini, bài toán này phải chứng minh, có luận cứ, mới dám chắc chắng để đưa ra công thức, biết đâu có người nói ăn cắp ý tưởng, thì khổ, nhưng chưa chứng minh đc đành nhờ anh em GPE
- và đưa công thức của người khác .. và chê là dùng kết quả chứng minh (trong khi TG đã công nhận, công thức có nhiều dạng chứng minh như: phản đề, quy nạp ...vv)
minahnh0011 đã viết:
O (m) = ( m-2^n)*2 +1 dk: max( 2^n ) luôn luôn <= m (có từ năm 2009)
http://m.soha.vn/cau-do-toan-hoc-na...hai-truong-hop-tuong-tu-20161123132313219.htm, video này dùng kết quả để chứng minh, hoàn toàn không thỏa mãn bài toán
--------------------------------------------------------------------------------------------------------------------------------


==> tôi không hiểu chủ thớt muốn gì? muốn nhờ chứng minh công thức - mà không đưa công thức lên thì chứng minh bằng niềm tin??? ==> tốn thời gian vô ích cho các topic mập mờ kiểu này.
 
Lần chỉnh sửa cuối:
Upvote 0
Cái File tôi đăng lên rõ mồn một, mà các anh đọc không hiểu, biễu diễn là: ghi rõ các số bằng vba, tôi đã đánh bằng tay, vì vậy mới mong các anh trên GPE liệt kê nhanh nhờ vba, còn bài toán, giả như: Có một triệu bông hoa, tôi muốn xếp 500 bông hoa Tulip vào 500 vị trí của 1 tr hoa dại kia, sau khi đã loại (1 bỏ 1) để 500 bông vừa đứng đều và đẹp. Còn công thức kia, thì không thể làm đc. Có công thức tối ưu hơn, nếu có sự trợ giúp của excel
 
Upvote 0
Với công thức: với 500 lính
O(m) = (m-2^n)*2+1
O(500)=(500-256)*2+1
Người giải bài toán này dùng kết quả để giải, tôi thấy giống như tôi đã ăn cái bánh, rồi lấy những gì trong bụng tôi ra, để biết tôi đã nhai nó, đã ăn nó. Chỉ tôi với ông, cái bánh tự nhiên mất, rõ là 1 trong hai, có nhất thiết mổ bụng ra xem có bánh ko. Nếu được lấy kết quả để chứng minh thì 41 người lính không ai chết cả, họ ngồi xuống và ghi ra đất để tìm kq, bài toán chỉ được tính nhẩm và phải nhanh trước khi bị đâm chết, riêng ông giải bài này đã chết đầu tiên
 
Upvote 0
Với công thức: với 500 lính
O(m) = (m-2^n)*2+1
O(500)=(500-256)*2+1
Người giải bài toán này dùng kết quả để giải, tôi thấy giống như tôi đã ăn cái bánh, rồi lấy những gì trong bụng tôi ra, để biết tôi đã nhai nó, đã ăn nó. Chỉ tôi với ông, cái bánh tự nhiên mất, rõ là 1 trong hai, có nhất thiết mổ bụng ra xem có bánh ko. Nếu được lấy kết quả để chứng minh thì 41 người lính không ai chết cả, họ ngồi xuống và ghi ra đất để tìm kq, bài toán chỉ được tính nhẩm và phải nhanh trước khi bị đâm chết, riêng ông giải bài này đã chết đầu tiên

Nói thẳng ra, bạn kém kiến thức về toán số và ngôn ngữ lập trình cho nên diễn tả bài toán lủng củng. Điển hình:
1. Ký hiệu O(n) dùng để diễn tả độ phức tạp về thời gian tính của giải thuật. Bạn đưa ra như một hàm số tính kết quả ???
2. Bài toán này người ta dùng phép quy nạp để chứng minh (bảo vệ) công thức. Bạn nói là "dùng kết quả để giải" ???

Trong toán học, bài này tên là Josephus Problem. Bạn nào muốn tìm bài giải cứ việc gú gô trên mạng có cả đống.
Code giải bàì, viết bằng C++ chỉ có vài dòng.

Chấm hết.
 
Upvote 0
Nói thẳng ra, bạn kém kiến thức về toán số và ngôn ngữ lập trình cho nên diễn tả bài toán lủng củng. Điển hình:
1. Ký hiệu O(n) dùng để diễn tả độ phức tạp về thời gian tính của giải thuật. Bạn đưa ra như một hàm số tính kết quả ???
2. Bài toán này người ta dùng phép quy nạp để chứng minh (bảo vệ) công thức. Bạn nói là "dùng kết quả để giải" ???

Trong toán học, bài này tên là Josephus Problem. Bạn nào muốn tìm bài giải cứ việc gú gô trên mạng có cả đống.
Code giải bàì, viết bằng C++ chỉ có vài dòng.

Chấm hết.
anh Vet giỏi thật , sao cái gì anh cũng biết hết vậy.
 
Upvote 0
Một số kết quả để so sánh:
Với 500000 số cho kết quả là 474513
Bạn nhầm. Phải là: Với 500000 số cho kết quả là 475713
------------
Trong Toán học đôi khi ta gặp phải bài loại: "Hãy tìm công thức ..."
Vd. "Hãy tìm công thức 1³ + 2³ + ... + n³ với n là số tự nhiên"

Với dạng bài này chỉ cần chỉ ra được công thức và chứng minh nó đúng. Cònchuyện từ đâu có công thức đó thì không quan trọng. Tôi có thể nằm mơ thấycông thức như thế. Có thể tự dưng đoán được. Không ai có thể bắt bẻ gì được. Vì cái mấu chốt là tôi chứng minh được nó đúng. Thế thôi. Fécma có những định lý nổi tiếng được chứng minh. Định lý lớn được ông ghi bên lề một cuốn sách :D. Không ai bắt bẻ: từ đâu mà ông có. Ông nằm mơ thấy? Cứ cho là nằm mơ thấy thì cũng phải là Fécma vĩ đại mới nằm mơ ra :D

Nhiều khi việc chứng minh rất dễ. Cái khó là nằm mơ ra công thức để biết phải chứng minh cái gì.
Với bài toán trên thì công thức là tổng = (1 + 2 + ... + n)² = (n*(n+1)/2)²
Rõ ràng chứng minh bằng qui nạp tổng = (n*(n+1)/2)² không hề khó. Cái khó là mơ thấy công thức tổng = (1 + 2 + ... + n)²
Có nhiều cách mơ công thức. Vd. ta thử liệt kê ra một vài trường hợp đâu để tìm qui luật.
n = 1 -> t = 1
n = 2 -> t = 9
n = 3 -> t = 36
n = 4 -> t = 100
Trên cơ sở phân tích ta tạm mơ rằng kết quả luôn là số chính phương
n = 1 -> t = 1 = 1²
n = 2 -> t = 9 = 3²
n = 3 -> t = 36 = 6²
n = 4 -> t = 100 = 10²
Qui luật của dãy 1, 3, 6, 10 thì quá rõ
n = 1 -> t = 1 = 1² = 1²
n = 2 -> t = 9 = 3² = (1 + 2)²
n = 3 -> t = 36 = 6² = (1 + 2 + 3)²
n = 4 -> t = 100 = 10² = (1 + 2 + 3 + 4)²

Vậy ta tạm đoán là 1³ + 2³ + ... + n³ = (1 + 2 + ... + n)²
Công thức phải chứng minh vì hiện thời ta thử thấy nó đúng chỉ với 4 giá trị của n. Có liệt kê ra 1 tỷ trường hợp đúng thì cũng không thể kết luận là công thức sẽ đúng với mọi n. Bắt buộc phải chứng minh chặt chẽ.
-------------
Cho n người ngồi trên n ghế được đánh số từ 1 đến n quanh một bàn tròn. Ta xuất phát bắt đầu từ 1 và giết người bên cạnh, tiếp theo lại bắt đầu từ người bên cạnh còn sống và giết người bên cạnh người đó. Cứ thế tiếp tục cho tới khi còn 1 người cuối cùng sống sót. Câu hỏi được đặt ra: Người ngồi ghế số bao nhiêu sẽ sống sót? Tức nếu cho n cụ thể thì phải chỉ ra được người sẽ sống sót.

Bài này thuộc loại "hãy tìm công thức ...". Tức phải chỉ ra được công thức và chứng minh nó là đúng.
Ta xét vài trường hợp:
n = 1 -> 1 -> ss = 1
n = 2 -> 1, 2 -> ss = 1
n = 3 -> 1, 2, 3 -> ss = 3
n = 4 -> 1, 2, 3, 4 -> ss = 1
n = 5 -> 1, 2, 3, 4, 5 -> ss = 3
n = 6 -> 1, 2, 3, 4, 5, 6 -> ss = 5
n = 7 -> 1, 2, 3, 4, 5, 6, 7 -> ss = 7
n = 8 -> 1, 2, 3, 4, 5, 6, 7, 8 -> ss = 1

n = 9 -> 1, 2, 3, 4, 5, 6, 7, 8, 9 -> ss = 3
n = 10 -> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 -> ss = 5
n = 11 -> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 -> ss = 7
n = 12 -> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 -> ss = 9
n = 13 -> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 -> ss = 11
n = 14 -> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 -> ss = 13
n = 15 -> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 -> ss = 15

...
Trên cơ sở các kết quả trên tạm đoán là:
1. Nếu n là lũy thừa của 2 (2¹, 2², 2³, ...) thì số 1 sống sót.
2. Với n không là lũy thừa của 2 thì kết quả lần lượt là những số lẻ liên tiếp - số lẻ thứ 2, thứ 3, thứ 4 (n = 5, 6, 7) hoặc số lẻ thứ 2, 3, 4, 5, 6, 7, 8 (n = 9, 10, ..., 15). Nếu ta để ý rằng với n = 5, 6, 7 thì lũy thừa lớn nhất của 2 trong 3 dãy là 4. Sau số 4 thì có 1 (n = 5), 2 (n = 6), và 3 (n = 7) số. Tức "thứ 2" = "thứ (1+1)", "thứ 3" = "thứ (1+2)", "thứ 4" = "thứ (1+3)"
Tương tự với n = 9, 10, ..., 15 thì lũy thừa lớn nhất của 2 trong 7 dãy đều là 8. Và sau 8 có lần lượt 1, 2, ..., 7 số. Và các số sống sót là 7 số lẻ "thứ (1+1)", "thứ (1+2)", ..., "thứ (1+7)"

Tóm lại có thể tạm đoán là:
1. n là lũy thừa của 2 (2¹, 2², 2³, ...) thì số 1 sống sót.
2. n không là lũy thừa của 2, Gọi 2^k là lũy thừa lớn nhất của 2 nhưng nhỏ hơn n. Gọi q là số các số trong dãy mà đứng sau 2^k. Lúc đó số sống sót là số lẻ thứ (q+1) trong dãy. Mà số lẻ thứ (q+1) = 2*(q+1) - 1 = 2q+1
q = (n-2^k). Vậy số sống sót là số 2q+1 = 2(n-2^k)+1

Tôi đã chứng minh được nhưng ghi bên lề một cuốn sách (bắt chước Fécma) nhưng quên ở quyển nào. Để tôi tìm xem. :D
 
Lần chỉnh sửa cuối:
Upvote 0
chủ thớt ba hoa ba la nên bị mọi người cạo cho. Tôi xem file và đoán dụng ý của tác giả, chủ thớt không hỏi công thức, mà hỏi cách biểu diễn quá trình xử bắn, đầu tiên là có bao nhiêu người, bắn lần một thì còn bao nhiêu người, đó là những ai. Giả sử có 1Trieeuj người, biểu diễn theo vòng tròn là bất khả thi. "nên mộng ước đầu tôi nghe đã chìm sâu, từ máy thu thanh...."
 
Upvote 0
Web KT
Back
Top Bottom