Description:
算24点是一个经典的益智游戏。游戏目标是对于给定的4 个正整数,多次利用加、减、乘、除运算,最终得到24。
现增加给定数字的数量以及可供使用的运算符。
修改后的游戏规则如下:
给定一个含有n个自然数的集合,并支持以下操作:
(1)从集合中选择两个数
a
,
b
a,b
a,b,将它们从集合中删除,并向集合中添加以下几个数中的任意一个:
①
a
+
b
,
②
a
−
b
,
③
a
×
b
,
④
a
/
b
(
b
!
=
0
)
,
⑤
a
b
,
⑥
l
o
g
a
b
(
a
>
0
且
a
≠
1
且
b
>
0
)
①a+b,②a-b,③a\times b,④a/b(b!=0),⑤a^b,⑥log_a{b}(a>0且a\ne1且b>0)
①a+b,②a−b,③a×b,④a/b(b!=0),⑤ab,⑥logab(a>0且a̸=1且b>0)
(2)从集合中选择一个数
a
a
a,将它从集合中删除,并向集合中添加以下几个数中的任意一个:
①
a
!
(
a
为
自
然
数
)
,
②
a
%
,
③
a
(
a
⩾
0
)
,
④
∣
a
∣
,
⑤
[
a
]
(
即
向
下
取
整
)
,
⑥
⌊
a
⌋
(
即
向
上
取
整
)
①a!(a为自然数),②a\%,③\sqrt{a}(a\geqslant 0),④|a|,⑤[a](即向下取整),⑥\left \lfloor a \right\rfloor(即向上取整)
①a!(a为自然数),②a%,③a(a⩾0),④∣a∣,⑤[a](即向下取整),⑥⌊a⌋(即向上取整)
当集合中只剩下一个数并且这个数是24 时,游戏目标达成。
现在给定一个集合
{
c
1
,
c
2
,
⋯
 
,
c
n
}
\{c_1,c_2,\cdots,c_n\}
{c1,c2,⋯,cn},请问是否可以通过若干次操作,达到游戏目标呢?是则输出 “Yes”,否则输出 “No”。
Input:
首先输入一个正整数T (1<=T<=1000),表示测试数据的组数。
对于每组测试数据,
第一行包含一个正整数n (1<=n<=100),
第二行包含n 个自然数
c
1
,
c
2
,
⋯
 
,
c
n
c_1,c_2,\cdots,c_n
c1,c2,⋯,cn(0<=
c
i
c_i
ci<=100) 。
Output:
对于每组测试数据,输出 “Yes” 或 “No”,表示该组测试数据的答案,每组输出占一行。
Sample Input:
2
4
0 0 0 0
4
5 12 15 23
Sample Output:
Yes
Yes
Tips:
对于第一组样例,一种可行的步骤如下:
{
0
,
0
,
0
,
0
}
→
{
1
,
0
,
0
,
0
}
→
{
1
,
1
,
0
,
0
}
→
{
1
,
1
,
1
,
0
}
→
{
1
,
1
,
1
,
1
}
→
{
2
,
1
,
1
}
→
{
3
,
1
}
→
{
4
}
→
{
24
}
\{0,0,0,0\}\rightarrow\{1,0,0,0\}\rightarrow\{1,1,0,0\}\rightarrow\{1,1,1,0\}\rightarrow\{1,1,1,1\}\rightarrow\{2,1,1\}\rightarrow\{3,1\}\rightarrow\{4\}\rightarrow\{24\}
{0,0,0,0}→{1,0,0,0}→{1,1,0,0}→{1,1,1,0}→{1,1,1,1}→{2,1,1}→{3,1}→{4}→{24}
即
(
0
!
+
0
!
+
0
!
+
0
!
)
!
=
24
(0!+ 0!+0!+0!)!=24
(0!+0!+0!+0!)!=24
对于第二组样例,一种可行的步骤如下:
{
5
,
12
,
15
,
23
}
→
{
0.05
,
12
,
15
,
23
}
→
{
12
,
23
,
300
}
→
{
276
,
300
}
→
{
576
}
→
{
24
}
\{5,12,15,23\}\rightarrow\{0.05,12,15,23\}\rightarrow\{12,23,300\}\rightarrow\{276,300\}\rightarrow\{576\}\rightarrow\{24\}
{5,12,15,23}→{0.05,12,15,23}→{12,23,300}→{276,300}→{576}→{24}
即
15
÷
5
%
+
12
×
23
=
24
\sqrt{15\div 5 \%+12\times 23}=24
15÷5%+12×23=24
Reference Code
#include <stdio.h>
int s[105];
int main(){
int T;
scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&s[i]);
}
if(n==1 && s[1]<=2){
printf("No\n");
}
else{
printf("Yes\n");
}
}
return 0;
}