题意:
给你n个数,每个数都是n,
然后把这n个数加减乘除,每个数都必须用一次,且只能一次,并且运算完的数也都得用一次。
也就是做n-1次,问能不能得到24,输出过程 xi ? xj 第i个数与第j个数做?运算 这种形式
思路:
因为n有可能很大,那么肯定需要一种完美的构造
最简单的方法是构造出4*6
构造出4需要5个数,构造出6需要7个数
也就是最少需要12个数,剩下的数就是相减为0,然后乘就好了
但是需要注意的就是13是不满足这个规律的
所以1~13特判一下,14以上的按规律输出就好了~
代码:
#include"cstdlib"
#include"cstdio"
#include"cstring"
#include"cmath"
#include"queue"
#include"algorithm"
#include"iostream"
using namespace std;
int main()
{
int n;
while(scanf("%d",&n)!=-1)
{
if(n<=3)
{
puts("-1");
continue;
}
if(n==4)
{
puts("1 * 2");
puts("5 + 3");
puts("6 + 4");
continue;
}
if(n==5)
{
puts("1 * 2");
puts("6 * 3");
puts("7 - 4");
puts("8 / 5");
continue;
}
if(n==6)
{
puts("1 + 2");
puts("3 + 4");
puts("5 - 6");
puts("7 + 8");
puts("9 + 10");
continue;
}
if(n==7)
{
puts("1 + 2");
puts("8 + 3");
puts("9 / 4");
puts("5 / 6");
puts("7 + 11");
puts("12 * 10");
continue;
}
if(n==8)
{
puts("1 + 2");
puts("9 + 3");
puts("5 - 4");
puts("6 * 11");
puts("7 * 12");
puts("8 * 13");
puts("10 + 14");
continue;
}
if(n==9)
{
puts("1 / 2"); //10 1
puts("3 - 10"); //11 8
puts("4 + 5"); //12 18
puts("12 + 6"); //13 27
puts("13 / 7"); //14 3
puts("11 * 14");//15 24
puts("8 - 9"); //16 0
puts("15 + 16");
continue;
}
if(n==10)
{
puts("1 + 2"); //11 20
puts("3 + 4"); //12 20
puts("5 + 6"); //13 20
puts("7 - 8"); //14 0
puts("9 * 14"); //15 0
puts("12 + 13");//16 40
puts("16 / 10");//17 4
puts("17 + 11");//18 24
puts("18 + 15");
continue;
}
if(n==11)
{
puts("1 + 2"); //12 22
puts("3 + 4"); //13 22
puts("13 / 5"); //14 2
puts("14 + 12");//15 24
puts("6 - 7"); //16 0
puts("8 * 16"); //17 0
puts("9 * 17"); //18 0
puts("10 * 18");//19 0
puts("11 * 19");//20 0
puts("20 + 15");//21 24
continue;
}
if(n==12)
{
puts("1 + 2"); //13 2n
printf("%d + 3\n",n+1); //14 3n
printf("%d + 4\n",n+2); //15 4n
printf("%d + 5\n",n+3); //16 5n
printf("%d + 6\n",n+4); //17 6n
printf("%d / 7\n",n+5); //18(n+6) 6
puts("8 + 9"); //19 2n
printf("%d + 10\n",n+7); //20 3n
printf("%d + 11\n",n+8); //21 4n
printf("%d / 12\n",n+9); //22(n+10) 4
printf("%d * %d\n",n+6,n+10); //23(n+11) 24
continue;
}
if(n==13)
{
puts("1 / 2"); //14 1
puts("3 - 14"); //15 12
puts("4 + 5"); //16 26
puts("16 / 6"); //17 2
puts("15 * 17");//18 24
puts("7 - 8"); //19 0
puts("9 * 19"); //20 0
puts("10 * 20"); //21 0
puts("11 * 21"); //22 0
puts("12 * 22"); //23 0
puts("13 * 23"); //24 0
puts("24 + 18"); //25 24
continue;
}
puts("1 + 2"); //13 2n
printf("%d + 3\n",n+1); //14 3n
printf("%d + 4\n",n+2); //15 4n
printf("%d + 5\n",n+3); //16 5n
printf("%d + 6\n",n+4); //17 6n
printf("%d / 7\n",n+5); //18(n+6) 6
puts("8 + 9"); //19 2n
printf("%d + 10\n",n+7); //20 3n
printf("%d + 11\n",n+8); //21 4n
printf("%d / 12\n",n+9); //22(n+10) 4
printf("%d * %d\n",n+6,n+10); //23(n+11) 24
puts("13 - 14");//n+12 0
int tep=n+12;
for(int i=15;i<=n;i++)
{
printf("%d * %d\n",i,tep);
tep++;
}
printf("%d + %d\n",n+11,tep);
}
return 0;
}