Saya melihat pertanyaan membingungkan baru-baru ini:
Tambahkan tanda kurung untuk menjadikan ini benar
Dan melihat bahwa satu jawaban menggunakan skrip Python untuk mencoba semua kemungkinan .
Tantangan Anda adalah, diberi ekspresi (sebagai string) dan integer, adalah membuat program yang dapat menentukan apakah Anda dapat menambahkan parens untuk membuat ekspresi sama dengan integer.
Misalnya, jika ekspresi adalah 1 + 2 * 3
dan bilangan bulat 9
, maka Anda dapat menambahkan parens seperti (1 + 2) * 3
, yang sama dengan 9, sehingga hasilnya harus benar. Tetapi jika ekspresi itu 1 + 2 - 3 * 4 / 5
dan bilangan bulatnya adalah 9999999999999
, Anda tidak bisa menambahkan jumlah parens apa pun untuk menyamakan itu 9999999999999
, jadi outputnya harus falsey.
Perhatikan bahwa input bilangan bulat mungkin positif atau negatif, tetapi ekspresi hanya akan mengandung bilangan bulat positif. Bahkan, ekspresi akan selalu cocok (\d+ [+*/-] )+ \d
(regex). Dengan kata lain, tidak ada parens, ada eksponen, hanya +
, -
, *
dan /
. Pesanan operator standar ( *
dan /
, kemudian+
dan -
).
Lebih banyak kasus uji:
1 + 2 - 3 * 4 / 9 and -1 -> truthy, ((1 + 2) - (3 * 4)) / 9
10 - 9 * 8 - 7 * 6 - 5 * 4 - 3 * 2 - 2 * 1 and 1, falsey, see linked question
10 + 9 - 8 * 7 + 6 - 5 * 4 + 3 - 2 * 1 and 82 -> truthy, (10 + (9 - 8)) * 7 + (6 - 5) * 4 + 3 - 2 * 1
34 + 3 and 15 -> falsey
1 + 2 + 5 + 7 and 36 -> falsey
1 / 10 * 3 + 3 / 10 * 10 and 6 -> truthy, (1/10*3+3/10)*10
Ada pertanyaan?
Anda dapat mengeluarkan ekspresi dengan tanda kurung jika memungkinkan, misalnya (10 + (9 - 8)) * 7 + (6 - 5) * 4 + 3 - 2 * 1
untuk kasus uji terakhir. Saya lebih suka ini daripada hanya nilai kebenaran, tetapi terserah Anda. Penggunaan 2(5)
untuk penggandaan tidak diperbolehkan, hanya saja *
.
3 / 2 - 1 - 1 and 2 -> 3 / (2 - 1) - 1
/
Apakah divisi float, kan?