声明:这道题没有涉及任何算法!给定函数f = (1) + (2) * b + (3) * c + (4) * d + (5)。
这题的题目叫‘此题乃神题,劝你别做’,果真神题,细节太多了,。
声明:这道题没有涉及任何算法!给定函数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 0 1
输出: 1+b+c+1
输入: 0 1111111111111 0 0 1
输出: 1111111111111b+1
输入:0 0 0 0 0
输出:0
输入:1 0 0 0 5
输出:1+5
思想:我用的二维数组与队列做的,实在是想不出其他办法了,有谁有简单的方法,请多多指教
代码如下:
#include<cstdio> #include<cstring> #include<queue> #include<iostream> using namespace std; int main() { char a[6][1000]; int i,j; while(scanf("%s%s%s%s%s",a[1],a[2],a[3],a[4],a[5])!=EOF) { queue<string>q; for(i=1;i<=4;i++) { if(strcmp(a[i],"0")!=0) break; } for(j=i;j<=4;j++) { if(a[j][0]=='0') continue; if(j!=i&&a[j][0]!='-') q.push("+"); if(strcmp(a[j],"1")!=0&&strcmp(a[j],"-1")!=0||j==1) { q.push(a[j]); } else if(strcmp(a[j],"-1")==0) q.push("-"); if(j==2)q.push("b"); else if(j==3)q.push("c"); else if(j==4)q.push("d"); } if(!q.empty()) { if(a[j][0]!='0') { if(a[j][0]!='-') q.push("+"); q.push(a[j]); } while(!q.empty()) { cout<<q.front(); q.pop(); } } else { printf("%s",a[5]); } printf("\n"); } return 0; }