第三次个人赛题目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; }
?
轉載于:https://www.cnblogs.com/jzdwajue/p/7398737.html
總結
以上是生活随笔為你收集整理的第三次个人赛题目2 【多项式输出格式】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HALCON示例程序rim.hdev轮圈
- 下一篇: 【生活相关】北京南苑机场接人