问题 B: 此题乃神题,劝你别做
时间限制: 1 Sec 内存限制: 128 MB提交: 138 解决: 8
[ 提交][ 状态][ 讨论版]
题目描述
声明:这道题没有涉及任何算法!给定函数f = (1) + (2) * b + (3) * c + (4) * d + (5)。
输入
输入数据有多组, 每组数据有5个整数,分别对应函数f 中(1)、(2)、(3)、(4)、(5)。
输出
输出f的表达式,具体看给出的样例输出,不要有多余的符号。
样例输入
2 3 -3 4 -5 1 2 3 -4 5 2 0 2 2 2
样例输出
2+3b-3c+4d-5 1+2b+3c-4d+5 2+2c+2d+2
提示
代码:
//总结:这种题首先要分两种情况:带不带字母 。还得注意,第一个数 是正数的时候,不用输出+。
//当是字母的时候看看有没有系数为1(或者-1)的项,如果有系数为1(或者-1)的项,那个系数就不用输出了
//然后得看系数是正还是负,如果是负的话,就不用管了,就直接将那一项输出就行了,如果是正的话,还得
//考虑是否输出正号,如果前面的系数都是0,那正号就不用输出了,如果有数,就得输出正号!
//还得考虑当所有的系数都是0,那就只能输出0了;
//注意:1.字母的系数1(-1只输出负号)不输出,数的话1要输出;
// 2.正号是否输出!(前面的系数都是0或者是第一项的话就不用输出)
// 3.当所有的项都是0的话,不能没有输出!要输出0!
// 4.注意数的大小(在hpuoj只能用long long),32位不能满足就只能用long long型来定义了!
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
int main()
{
long long a,b,c,d,e;
while(scanf("%lld%lld%lld%lld%lld",&a,&b,&c,&d,&e)!=EOF)//要用long long型进行定义!
{
if(a!=0)//必须判断是否为0,如果是0,则不用输出,否则必须输出
printf("%lld",a);
if(b<0)//对后面的数要正负分情况讨论,如果为负数不用输出正号,直接将数输出来就行了
{//但是,又一个问题来了,要是是-1的话,连1都不用输出了,直接输出-b就行了!
if(b==-1)
printf("-b");
else//否则得输出那个负数
printf("%lldb",b);
}
else if(b>0)
{
if(a!=0)//如果是正数,并且前面有数的话,才能加正号
{
printf("+");
}
if(b==1)//得判断系数是否是1,是1的话就不用输出1了!
printf("b");
else//要是不是1的话,就得将正数输出
printf("%lldb",b);
}
if(c<0)//c,d和b其实是一样的,在前面的系数是负数的时候,得分情况输出,看看是-1不是,是-1的话1就不用输出了
{//否则所有的数都得输出!
if(c==-1)
printf("-c");
else
printf("%lldc",c);
}
else if(c>0)//当为正数的时候,你不但要考虑前面的是否为1,1不输出,而且得考虑正好是否输出,只有前面有数的时候正号才输出!
{
if(a||b)
printf("+");
if(c==1)
printf("c");
else
printf("%lldc",c);
}
if(d<0)
{
if(d==-1)
printf("-d");
else
printf("%lldd",d);
}
else if(d>0)
{
if(a||b||c)
printf("+");
if(d==1)
printf("d");
else
printf("%lldd",d);
}
if(e<0)//最后一个是数,而不带字母,所以是正负1都得输出!
printf("%d",e);
else if(e>0)
{
if(a||b||c||d)//但是正1的时候你的正号得判断,如果前面没有数的话,正号就不用输出了!
printf("+");
printf("%lld",e);
}
if(!a&&!b&&!c&&!d&&!e)//如果前面的数的系数都是0的话就输出最后的结果为0!
printf("0");
printf("\n");//最后记住换行
}
return 0;
}
注意:这道题我做的思想没有错,就是用long long会出现输入1 0 0 0 0而输出a+0b+0c+0d的现象,你把long long换成__int64再试试,就对了!
代码:
//总结:这种题首先要分两种情况:带不带字母 。还得注意,第一个数 是正数的时候,不用输出+。
//当是字母的时候看看有没有系数为1(或者-1)的项,如果有系数为1(或者-1)的项,那个系数就不用输出了
//然后得看系数是正还是负,如果是负的话,就不用管了,就直接将那一项输出就行了,如果是正的话,还得
//考虑是否输出正号,如果前面的系数都是0,那正号就不用输出了,如果有数,就得输出正号!
//还得考虑当所有的系数都是0,那就只能输出0了;
//注意:1.字母的系数1(-1只输出负号)不输出,数的话1要输出;
// 2.正号是否输出!(前面的系数都是0或者是第一项的话就不用输出)
// 3.当所有的项都是0的话,不能没有输出!要输出0!
// 4.注意数的大小(在hpuoj只能用long long),32位不能满足就只能用long long型来定义了!
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
int main()
{
__int64 a,b,c,d,e;
while(scanf("%I64d%I64d%I64d%I64d%I64d",&a,&b,&c,&d,&e)!=EOF)//要用long long型进行定义!
{
if(a!=0)//必须判断是否为0,如果是0,则不用输出,否则必须输出
printf("%I64d",a);
if(b<0)//对后面的数要正负分情况讨论,如果为负数不用输出正号,直接将数输出来就行了
{//但是,又一个问题来了,要是是-1的话,连1都不用输出了,直接输出-b就行了!
if(b==-1)
printf("-b");
else//否则得输出那个负数
printf("%I64db",b);
}
else if(b>0)
{
if(a!=0)//如果是正数,并且前面有数的话,才能加正号
{
printf("+");
}
if(b==1)//得判断系数是否是1,是1的话就不用输出1了!
printf("b");
else//要是不是1的话,就得将正数输出
printf("%I64db",b);
}
if(c<0)//c,d和b其实是一样的,在前面的系数是负数的时候,得分情况输出,看看是-1不是,是-1的话1就不用输出了
{//否则所有的数都得输出!
if(c==-1)
printf("-c");
else
printf("%I64dc",c);
}
else if(c>0)//当为正数的时候,你不但要考虑前面的是否为1,1不输出,而且得考虑正好是否输出,只有前面有数的时候正号才输出!
{
if(a||b)
printf("+");
if(c==1)
printf("c");
else
printf("%I64dc",c);
}
if(d<0)
{
if(d==-1)
printf("-d");
else
printf("%I64dd",d);
}
else if(d>0)
{
if(a||b||c)
printf("+");
if(d==1)
printf("d");
else
printf("%I64dd",d);
}
if(e<0)//最后一个是数,而不带字母,所以是正负1都得输出!
printf("%d",e);
else if(e>0)
{
if(a||b||c||d)//但是正1的时候你的正号得判断,如果前面没有数的话,正号就不用输出了!
printf("+");
printf("%I64d",e);
}
if(!a&&!b&&!c&&!d&&!e)//如果前面的数的系数都是0的话就输出最后的结果为0!
printf("0");
printf("\n");//最后记住换行
}
return 0;
}