câu đố số học là một bài tập toán học trong đó các chữ số của một số số được biểu thị bằng chữ cái (hoặc ký hiệu). Mỗi chữ cái biểu thị một giá trị riêng biệt . Mục tiêu là tìm các chữ số sao cho một phương trình toán học nhất định đã xác minh:
CP + IS + FUN - = TRUEMột lượt gán chữ cái thành chữ số dẫn đến phương trình sau:
23 + 74 + 968 - = 1065Có các câu trả lời khác cho vấn đề này. Chúng tôi sẽ cho biết cách tìm tất cả các giải pháp.
Giống như mọi bài toán tối ưu hoá khác, chúng ta sẽ bắt đầu bằng cách xác định các biến và hạn chế. Biến là các chữ cái, có thể nhận bất kỳ chữ số nào giá trị.
Đối với CP + IS + FUN = TRUE, các điều kiện ràng buộc như sau:
Bạn có thể giải các bài toán mật mã bằng trình giải CP-SAT mới. hiệu quả hơn hoặc là công cụ giải quyết CP ban đầu. Chúng tôi sẽ đưa ra ví dụ cho bạn bằng cả hai trình giải, bắt đầu bằng mã CP-SAT.
Chúng tôi sẽ trình bày các biến, quy tắc ràng buộc, lệnh gọi trình giải quyết và cuối cùng là các chương trình hoàn chỉnh.
Mã sau đây nhập thư viện bắt buộc.
Mã sau đây khai báo mô hình cho sự cố này.
Khi dùng trình giải CP-SAT, bạn nên dùng một số phương pháp trợ giúp định nghĩa. Chúng ta sẽ sử dụng một trong các số đó, NewIntVar, để khai báo chữ số (số nguyên). Chúng tôi phân biệt giữa những chữ cái có thể là 0 và những chữ cái có thể bằng 0 không thể (C, I, F và T).
Tiếp theo là các điều kiện ràng buộc. Trước tiên, chúng tôi đảm bảo rằng tất cả các chữ cái đều có giá trị khác nhau, bằng phương thức trợ giúp AddAllDifferent. Sau đó, chúng ta sử dụng trình trợ giúp AddEquality để tạo các điều kiện ràng buộc thực thi đẳng thức CP + IS + FUN = TRUE.
Mã cho máy in giải pháp, cho thấy từng giải pháp dưới dạng trình giải tìm thấy nội dung đó, được hiển thị dưới đây.
Cuối cùng, chúng ta khắc phục bài toán và hiện đáp án. Tất cả điều kỳ diệu nằm trong operations_research::sat::SolveCpModel() .
Khi chạy chương trình, bạn sẽ phát kết quả sau đây, trong đó mỗi hàng là một giải pháp:
C=2 P=3 I=7 S=4 F=9 U=6 N=8 T=1 R=0 E=5 C=2 P=4 I=7 S=3 F=9 U=6 N=8 T=1 R=0 E=5 C=2 P=5 I=7 S=3 F=9 U=4 N=8 T=1 R=0 E=6 C=2 P=8 I=7 S=3 F=9 U=4 N=5 T=1 R=0 E=6 C=2 P=8 I=7 S=3 F=9 U=6 N=4 T=1 R=0 E=5 C=3 P=7 I=6 S=2 F=9 U=8 N=5 T=1 R=0 E=4 C=6 P=7 I=3 S=2 F=9 U=8 N=5 T=1 R=0 E=4 C=6 P=5 I=3 S=2 F=9 U=8 N=7 T=1 R=0 E=4 C=3 P=5 I=6 S=2 F=9 U=8 N=7 T=1 R=0 E=4 C=3 P=8 I=6 S=4 F=9 U=2 N=5 T=1 R=0 E=7 C=3 P=7 I=6 S=5 F=9 U=8 N=2 T=1 R=0 E=4 C=3 P=8 I=6 S=5 F=9 U=2 N=4 T=1 R=0 E=7 C=3 P=5 I=6 S=4 F=9 U=2 N=8 T=1 R=0 E=7 C=3 P=4 I=6 S=5 F=9 U=2 N=8 T=1 R=0 E=7 C=3 P=2 I=6 S=5 F=9 U=8 N=7 T=1 R=0 E=4 C=3 P=4 I=6 S=8 F=9 U=2 N=5 T=1 R=0 E=7 C=3 P=2 I=6 S=7 F=9 U=8 N=5 T=1 R=0 E=4 C=3 P=5 I=6 S=8 F=9 U=2 N=4 T=1 R=0 E=7 C=3 P=5 I=6 S=7 F=9 U=8 N=2 T=1 R=0 E=4 C=2 P=5 I=7 S=6 F=9 U=8 N=3 T=1 R=0 E=4 C=2 P=5 I=7 S=8 F=9 U=4 N=3 T=1 R=0 E=6 C=2 P=6 I=7 S=5 F=9 U=8 N=3 T=1 R=0 E=4 C=2 P=4 I=7 S=8 F=9 U=6 N=3 T=1 R=0 E=5 C=2 P=3 I=7 S=8 F=9 U=6 N=4 T=1 R=0 E=5 C=2 P=8 I=7 S=5 F=9 U=4 N=3 T=1 R=0 E=6 C=2 P=8 I=7 S=4 F=9 U=6 N=3 T=1 R=0 E=5 C=2 P=6 I=7 S=3 F=9 U=8 N=5 T=1 R=0 E=4 C=2 P=5 I=7 S=3 F=9 U=8 N=6 T=1 R=0 E=4 C=2 P=3 I=7 S=5 F=9 U=4 N=8 T=1 R=0 E=6 C=2 P=3 I=7 S=5 F=9 U=8 N=6 T=1 R=0 E=4 C=2 P=3 I=7 S=6 F=9 U=8 N=5 T=1 R=0 E=4 C=2 P=3 I=7 S=8 F=9 U=4 N=5 T=1 R=0 E=6 C=4 P=3 I=5 S=8 F=9 U=2 N=6 T=1 R=0 E=7 C=5 P=3 I=4 S=8 F=9 U=2 N=6 T=1 R=0 E=7 C=6 P=2 I=3 S=7 F=9 U=8 N=5 T=1 R=0 E=4 C=7 P=3 I=2 S=6 F=9 U=8 N=5 T=1 R=0 E=4 C=7 P=3 I=2 S=8 F=9 U=4 N=5 T=1 R=0 E=6 C=6 P=4 I=3 S=8 F=9 U=2 N=5 T=1 R=0 E=7 C=5 P=3 I=4 S=6 F=9 U=2 N=8 T=1 R=0 E=7 C=4 P=3 I=5 S=6 F=9 U=2 N=8 T=1 R=0 E=7 C=5 P=6 I=4 S=3 F=9 U=2 N=8 T=1 R=0 E=7 C=7 P=4 I=2 S=3 F=9 U=6 N=8 T=1 R=0 E=5 C=7 P=3 I=2 S=4 F=9 U=6 N=8 T=1 R=0 E=5 C=6 P=2 I=3 S=5 F=9 U=8 N=7 T=1 R=0 E=4 C=7 P=3 I=2 S=5 F=9 U=4 N=8 T=1 R=0 E=6 C=6 P=4 I=3 S=5 F=9 U=2 N=8 T=1 R=0 E=7 C=6 P=5 I=3 S=4 F=9 U=2 N=8 T=1 R=0 E=7 C=7 P=5 I=2 S=3 F=9 U=4 N=8 T=1 R=0 E=6 C=4 P=6 I=5 S=3 F=9 U=2 N=8 T=1 R=0 E=7 C=6 P=5 I=3 S=8 F=9 U=2 N=4 T=1 R=0 E=7 C=6 P=5 I=3 S=7 F=9 U=8 N=2 T=1 R=0 E=4 C=7 P=5 I=2 S=8 F=9 U=4 N=3 T=1 R=0 E=6 C=7 P=5 I=2 S=6 F=9 U=8 N=3 T=1 R=0 E=4 C=5 P=8 I=4 S=6 F=9 U=2 N=3 T=1 R=0 E=7 C=4 P=8 I=5 S=6 F=9 U=2 N=3 T=1 R=0 E=7 C=4 P=8 I=5 S=3 F=9 U=2 N=6 T=1 R=0 E=7 C=5 P=8 I=4 S=3 F=9 U=2 N=6 T=1 R=0 E=7 C=7 P=8 I=2 S=3 F=9 U=4 N=5 T=1 R=0 E=6 C=7 P=8 I=2 S=3 F=9 U=6 N=4 T=1 R=0 E=5 C=7 P=8 I=2 S=4 F=9 U=6 N=3 T=1 R=0 E=5 C=7 P=8 I=2 S=5 F=9 U=4 N=3 T=1 R=0 E=6 C=6 P=8 I=3 S=5 F=9 U=2 N=4 T=1 R=0 E=7 C=6 P=8 I=3 S=4 F=9 U=2 N=5 T=1 R=0 E=7 C=6 P=7 I=3 S=5 F=9 U=8 N=2 T=1 R=0 E=4 C=7 P=6 I=2 S=5 F=9 U=8 N=3 T=1 R=0 E=4 C=7 P=3 I=2 S=5 F=9 U=8 N=6 T=1 R=0 E=4 C=7 P=4 I=2 S=8 F=9 U=6 N=3 T=1 R=0 E=5 C=7 P=3 I=2 S=8 F=9 U=6 N=4 T=1 R=0 E=5 C=5 P=6 I=4 S=8 F=9 U=2 N=3 T=1 R=0 E=7 C=4 P=6 I=5 S=8 F=9 U=2 N=3 T=1 R=0 E=7 C=7 P=6 I=2 S=3 F=9 U=8 N=5 T=1 R=0 E=4 C=7 P=5 I=2 S=3 F=9 U=8 N=6 T=1 R=0 E=4 Statistics - status : OPTIMAL - conflicts : 110 - branches : 435 - wall time : 0.014934 ms - solutions found : 72Sau đây là các chương trình hoàn chỉnh.
Trong trường hợp này, chúng tôi sẽ coi cơ số là biến số nên bạn có thể giải phương trình để có cơ sở cao hơn. (Không thể có giải pháp cơ sở thấp hơn cho CP + IS + FUN = TRUE vì 10 chữ cái phải khác nhau.)
Mã sau đây nhập thư viện bắt buộc.
Bước đầu tiên là tạo Solver.
Bước đầu tiên là tạo một IntVar cho mỗi chữ cái. Chúng tôi phân biệt giữa các chữ cái có thể có khả năng là 0 và những chữ cái không thể (C, I, F, và T).
Tiếp theo, chúng ta sẽ tạo một mảng chứa IntVar mới cho mỗi chữ cái. Điều này chỉ là cần thiết bởi vì khi xác định các hạn chế, chúng ta sẽ sử dụng AllDifferent, vì vậy chúng ta cần một mảng mà mỗi phần tử cần phải khác nhau.
Cuối cùng, chúng tôi xác minh rằng cơ sở của chúng tôi ít nhất phải bằng số chữ cái; nếu không thì sẽ không có giải pháp.
Bây giờ, chúng ta đã xác định được các biến, bước tiếp theo là xác định các điều kiện ràng buộc. Trước tiên, chúng ta thêm quy tắc ràng buộc AllDifferent, buộc mỗi chữ cái phải có một chữ số khác nhau.
Tiếp theo, chúng ta sẽ thêm quy tắc ràng buộc CP + IS + FUN = TRUE. Các chương trình mẫu thực hiện việc này theo những cách khác nhau.
Bây giờ, chúng ta đã có các biến và quy tắc ràng buộc, chúng ta đã sẵn sàng để giải quyết.
Mã cho máy in giải pháp, cho thấy từng giải pháp dưới dạng trình giải tìm thấy nội dung đó, được hiển thị dưới đây.
Vì có nhiều giải pháp cho vấn đề của chúng ta, nên chúng ta lặp lại theo các nghiệm có vòng lặp while solver.NextSolution(). Nếu chúng tôi chỉ muốn một giải pháp duy nhất, chúng tôi sẽ sử dụng thành ngữ này:
if (solver.NextSolution()) { // Print solution. } else { // Print that no solution could be found. }Sau đây là các chương trình hoàn chỉnh.
Link nội dung: https://hauionline.edu.vn/giai-ma-so-hoc-a103567.html