第三次个人赛题目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;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值