Phép nhân giữa 2 số nguyên có thể được giảm thành một chuỗi bổ sung như vậy
3 * 5 = 3 + 3 + 3 + 3 + 3 = 5 + 5 + 5
Số mũ (tăng a lên lũy thừa b ) cũng có thể được giảm thành một chuỗi các phép nhân:
5 ^ 3 = 5 * 5 * 5
Do đó, lũy thừa có thể được giảm thành một loạt các phép cộng, bằng cách tạo một biểu thức nhân, sau đó thành một chuỗi các phép cộng. Ví dụ: 5 ^ 3
(5 khối) có thể được viết lại thành
5 ^ 3 = 5 * 5 * 5
= (5 + 5 + 5 + 5 + 5) * 5
= (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5) + (5 + 5 + 5 + 5 + 5)
= 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5
Nhiệm vụ của bạn là, được đưa ra các biểu thức được cộng lại với nhau bao gồm lũy thừa, nhân và cộng, giảm nó thành chuỗi bổ sung ngắn nhất. Biểu thức "ngắn nhất" được định nghĩa là biểu thức có số lượng +
ký hiệu ít nhất , vẫn chỉ sử dụng một trong hai số trong biểu thức gốc. Ví dụ, biểu thức ngắn nhất 10 * 2
là 10 + 10
.
Tất cả các số liên quan đến đầu vào sẽ là các số nguyên dương và biểu thức sẽ chỉ bao gồm +
(cộng), *
(nhân) và ^
(lũy thừa), cùng với các số nguyên và ngoặc ( ()
) để biểu thị mức độ ưu tiên.
Đầu ra chỉ bao gồm các số nguyên dương và +
ký hiệu. Bạn không nên xuất các bước giảm riêng lẻ, chỉ là đầu ra cuối cùng. Đầu ra có thể không bao gồm bất kỳ số nào không xuất hiện trong đầu vào. Tuy nhiên, bạn có thể sử dụng bất kỳ 3 biểu tượng riêng biệt nào thay vì +*^
, nhưng vui lòng cho biết chúng là những biểu tượng nào
Các không gian ngăn cách đầu vào và đầu ra có thể hoặc không thể được sử dụng trong các chương trình của bạn, nghĩa là 3 * 5
có thể xuất ra dưới dạng 5 + 5 + 5
hoặc 5+5+5
.
Lưu ý rằng trong hầu hết các trường hợp, bổ sung không thực sự được thực hiện. Trường hợp duy nhất mà việc bổ sung được thực hiện là khi bạn có một cái gì đó như 5 ^ (1 + 2)
, trong trường hợp đó, sự bổ sung là cần thiết để tiếp tục -> 5 ^ 3 -> 5 * 5 * 5 -> ...
. Xem trường hợp thử nghiệm # 4.
Mã của bạn không cần xử lý các đầu vào đến một biểu thức mơ hồ. Ví dụ , (2 + 2) * (4 + 1)
. Do các quy tắc được đặt ra cho đến nay, mục tiêu không phải là tính toán câu trả lời, mục tiêu là đơn giản hóa để bổ sung. Vì vậy, kết quả có thể khác nhau tùy theo thứ tự các biểu thức được giải quyết hoặc đi lại (bổ sung nào để đơn giản hóa, cái nào để lại?). Một ví dụ không hợp lệ khác : ((3 + 2) ^ 2) ^ 3 -> ((3 + 2) * (3 + 2)) ^ 3 -> ???
.
Đây là môn đánh gôn nên mã ngắn nhất sẽ thắng
Các trường hợp thử nghiệm
Input => output
5 ^ 3 + 4 * 1 ^ 5 => 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 5 + 4
2 ^ 1 * 2 + 3 + 9 => 2 + 2 + 3 + 9
2 ^ 1 * (2 + 3) + 9 => 2 + 3 + 2 + 3 + 9
2 ^ (1 * (2 + 3)) + 9 => 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 9
10 + 3 * 2 + 33 ^ 2 => 10 + 3 + 3 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33 + 33
100 * 3 => 100 + 100 + 100
2 ^ 1 + 2 ^ 1 + 2 ^ 2 + 8 ^ 1 => 2 + 2 + 2 + 2 + 8
(1 + 2 + 5 * 8 + 2 ^ 4) * 2 => 1 + 2 + 8 + 8 + 8 + 8 + 8 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 1 + 2 + 8 + 8 + 8 + 8 + 8 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2
using only one of the two numbers in the original expression.
nhưng biểu thức ban đầu có thể có nhiều hơn hai số. Tôi không hiểu tại sao 8 + 8
không phải là một đầu ra hợp lệ cho 2 ^ 1 + 2 ^ 1 + 2 ^ 2 + 8 ^ 1
. Câu hỏi này vẫn còn chưa rõ ràng với tôi.
**
thay vì^
?