您的位置:首页 > 其它

Codeforces Round #268 (Div. 2) C 24 Game

2014-09-25 15:37 267 查看
也是好久没有写博客,代码最近也少敲了。一直在学数学来着,前些天一场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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: