Description
给出n个数字n,要把所有数字用完,使用+-*/最后变为24,中间运算可以有有浮点数
Input
多组用例,每组一个整数n,以文件尾结束输入
Output
对于每组用例,如果能运算出24点则输出运算过程,否则输出-1
Sample Input
4
Sample Output
1 * 2
5 + 3
6 + 4
Solution
打表。。。
Code
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
if(n<=3)printf("-1\n");
else if(n==4)printf("1 * 2\n5 + 3\n6 + 4\n");
else if(n==5)printf("1 / 2\n6 / 3\n4 - 7\n5 * 8\n");
else if(n==6)printf("1 * 2\n7 + 3\n8 - 4\n9 - 5\n10 - 6\n");
else if(n==7)printf("1 + 2\n8 + 3\n4 + 5\n10 + 6\n11 / 7\n9 + 12\n");
else if(n==8)printf("1 + 2\n3 + 9\n4 - 5\n6 * 11\n7 * 12\n8 * 13\n10 + 14\n");
else if(n==9)printf("1 / 2\n3 - 10\n4 / 5\n6 - 12\n7 / 8\n9 - 14\n11 + 13\n16 + 15\n");
else if(n==10)printf("1 / 2\n3 / 4\n5 + 6\n13 / 7\n11 + 8\n12 + 15\n16 * 14\n17 + 9\n18 - 10\n");
else if(n==11)printf("1 / 2\n12 + 3\n4 / 5\n7 / 6\n9 / 8\n11 / 10\n14 + 15\n13 * 18\n19 + 16\n20 - 17\n");
else if(n==12)printf("1 + 2\n13 / 3\n14 * 4\n15 + 5\n16 - 6\n17 + 7\n18 - 8\n19 + 9\n20 - 10\n21 + 11\n22 - 12\n");
else if(n==13)printf("1 / 2\n3 - 14\n4 / 5\n6 / 7 \n16 + 17\n18 * 15\n19 + 8\n20 - 9\n21 + 10\n22 - 11\n23 + 12\n24 - 13\n");
else if(n%2)
{
printf("1 + 2\n");
printf("%d + 3\n",n+1);
printf("4 + 5\n");
printf("6 + 7\n");
printf("8 + 9\n");
printf("10 + 11\n");
printf("%d + %d\n",n+3,n+4);
printf("%d + %d\n",n+5,n+6);
printf("%d + %d\n",n+7,n+8);
printf("%d / 12\n",n+2);
printf("%d / 13\n",n+9);
printf("%d * %d\n",n+10,n+11);
char c;
for(int i=13;i<n;i++)
printf("%d %c %d\n",n+i-1,i%2==0?'-':'+',i+1);
}
else if(n%2==0)
{
printf("1 + 2\n");
printf("3 + 4\n");
printf("5 + 6\n");
printf("7 + 8\n");
printf("9 + 10\n");
printf("%d + %d\n",n+1,n+2);
printf("%d + %d\n",n+5,n+6);
printf("%d + %d\n",n+3,n+4);
printf("%d / 11\n",n+7);
printf("%d / 12\n",n+8);
printf("%d * %d\n",n+9,n+10);
char c;
for(int i=11;i<n-1;i++)
printf("%d %c %d\n",n+i,i%2==0?'-':'+',i+2);
}
}
return 0;
}