也是好久没有写博客,代码最近也少敲了。一直在学数学来着,前些天一场cf打下来又重新变为蓝名,写一下帮助我加了200多分的C题。
24game,看题目感觉就是24点这玩意,不过题目要求从1到n 用到所有的数字,包括中间结果,最后得出一个24.
因为1*2*3*4=24,所以4以下的必定是凑不够了。5是1+2*4+3*5=24,6可以是2-1+3*4+5+6=24,7是1-2+3+4+5+6+7=24;
肯定不能这样一直推到下去,题目中虽然给出了8的情况,但是毕竟是特判,当时猛然想到了8的情况可以变为:在4已经凑够24的基础上,5-6+8-7=0;同理可以得到9、10、11;然后每4个数字可以凑成一个0。那么4个一循环重复输出这样的式子就可以了。
#include<stdio.h> #include<string.h> void si(int n) { int flag=0,fuck=0; puts("YES"); int w=n-4; if(w==0) flag=0; else//这个部分主要是进行有多少次重复输出,因为中间结果要用上,所以判断是否会有0+1=1这个式子; { flag=1; while(w>0) { if(fuck!=0) printf("0 + %d = %d\n",n-fuck,n-fuck); printf("%d - %d = -1\n",n-1-fuck,n-fuck); printf("%d - %d = 1\n",n-2-fuck,n-3-fuck); puts("-1 + 1 = 0"); w=w-4; fuck+=4; } } if(flag) puts("0 + 1 = 1"); puts("1 * 2 = 2"); puts("2 * 3 = 6"); puts("6 * 4 = 24"); } void wu(int n) { int flag=0,fuck=0; puts("YES"); int w=n-4; if(w==1) flag=0; else { flag=1; while(w>1) { if(fuck!=0) printf("0 + %d = %d\n",n-fuck,n-fuck); printf("%d - %d = -1\n",n-1-fuck,n-fuck); printf("%d - %d = 1\n",n-2-fuck,n-3-fuck); puts("-1 + 1 = 0"); w=w-4; fuck+=4; } } if(flag) puts("0 + 1 = 1"); puts("2 * 4 = 8"); puts("1 + 8 = 9"); puts("3 * 5 = 15"); puts("9 + 15 = 24"); } void liu(int n) { int flag=0,fuck=0; puts("YES"); int w=n-4; if(w==2) flag=0; else { flag=1; while(w>2) { if(fuck!=0) printf("0 + %d = %d\n",n-fuck,n-fuck); printf("%d - %d = -1\n",n-1-fuck,n-fuck); printf("%d - %d = 1\n",n-2-fuck,n-3-fuck); puts("-1 + 1 = 0"); w=w-4; fuck+=4; } } if(flag) puts("0 + 1 = 1"); puts("3 * 4 = 12"); puts("2 - 1 = 1"); puts("1 + 12 = 13"); puts("5 + 13 = 18"); puts("18 + 6 = 24"); } void qi(int n) { int flag=0,fuck=0; puts("YES"); int w=n-4; if(w==3) flag=0; else { flag=1; while(w>3) { if(fuck!=0) printf("0 + %d = %d\n",n-fuck,n-fuck); printf("%d - %d = -1\n",n-1-fuck,n-fuck); printf("%d - %d = 1\n",n-2-fuck,n-3-fuck); puts("-1 + 1 = 0"); w=w-4; fuck+=4; } } if(flag) puts("0 + 1 = 1"); puts("1 - 2 = -1"); puts("-1 + 3 = 2"); puts("2 + 4 = 6"); puts("6 + 5 = 11"); puts("11 + 6 = 17"); puts("17 + 7 = 24"); } int main() { int n; scanf("%d",&n); if(n<4) puts("NO"); else if(n%4==0) si(n); else if(n%4==1) wu(n); else if(n%4==2) liu(n); else if(n%4==3) qi(n); return 0; }