[模拟] hdu 5308 I Wanna Become A 24

题意:

给你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 1puts("3 – 10"); //11 8puts("4 + 5"); //12 18puts("12 + 6"); //13 27puts("13 / 7"); //14 3puts("11 * 14");//15 24puts("8 – 9"); //16 0puts("15 + 16");continue;}if(n==10){puts("1 + 2"); //11 20puts("3 + 4"); //12 20puts("5 + 6"); //13 20puts("7 – 8"); //14 0puts("9 * 14"); //15 0puts("12 + 13");//16 40puts("16 / 10");//17 4puts("17 + 11");//18 24puts("18 + 15");continue;}if(n==11){puts("1 + 2"); //12 22puts("3 + 4"); //13 22puts("13 / 5"); //14 2puts("14 + 12");//15 24puts("6 – 7"); //16 0puts("8 * 16"); //17 0puts("9 * 17"); //18 0puts("10 * 18");//19 0puts("11 * 19");//20 0puts("20 + 15");//21 24continue;}if(n==12){puts("1 + 2"); //13 2nprintf("%d + 3\n",n+1); //14 3nprintf("%d + 4\n",n+2); //15 4nprintf("%d + 5\n",n+3); //16 5nprintf("%d + 6\n",n+4); //17 6nprintf("%d / 7\n",n+5); //18(n+6) 6puts("8 + 9"); //19 2nprintf("%d + 10\n",n+7); //20 3nprintf("%d + 11\n",n+8); //21 4nprintf("%d / 12\n",n+9); //22(n+10) 4printf("%d * %d\n",n+6,n+10); //23(n+11) 24continue;}if(n==13){puts("1 / 2"); //14 1puts("3 – 14"); //15 12puts("4 + 5"); //16 26puts("16 / 6"); //17 2puts("15 * 17");//18 24puts("7 – 8"); //19 0puts("9 * 19"); //20 0puts("10 * 20"); //21 0puts("11 * 21"); //22 0puts("12 * 22"); //23 0puts("13 * 23"); //24 0puts("24 + 18"); //25 24continue;}puts("1 + 2"); //13 2nprintf("%d + 3\n",n+1); //14 3nprintf("%d + 4\n",n+2); //15 4nprintf("%d + 5\n",n+3); //16 5nprintf("%d + 6\n",n+4); //17 6nprintf("%d / 7\n",n+5); //18(n+6) 6puts("8 + 9"); //19 2nprintf("%d + 10\n",n+7); //20 3nprintf("%d + 11\n",n+8); //21 4nprintf("%d / 12\n",n+9); //22(n+10) 4printf("%d * %d\n",n+6,n+10); //23(n+11) 24puts("13 – 14");//n+12 0int 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;}

版权声明:本文为博主原创文章,未经博主允许不得转载。

如若今生再相见,哪怕流离百世,迷途千年,也愿。

[模拟] hdu 5308 I Wanna Become A 24

相关文章:

你感兴趣的文章:

标签云: