第三次个人赛题目2 【多项式输出格式】

问题 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; }


 

posted @ 2017-08-20 08:04  jzdwajue  阅读(152)  评论(0编辑  收藏  举报