2020牛客国庆集训派对day4 Digits Are Not Just Characters
生活随笔
收集整理的這篇文章主要介紹了
2020牛客国庆集训派对day4 Digits Are Not Just Characters
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Digits Are Not Just Characters
題意:
比較大小,如果比目標字符串大輸出“+”,相等也輸出“+”,小則輸出“-”:
比較規則:
字母大于數字
兩個字母比較按照ASCII碼
當被解釋為十進制數時,兩個數字項按其值排序。
題解:
如果用默認比較,X52Y 大于X222,因為計算機會先比較X,X一樣再比較5和2,5>2,所以前者大于后者,但實際上,按照題目規則,X比完后,再比較52和222,也就是一串數字要當做一個整體來處理,
而且數字遇上字母,字母大于數字,也就是X52Y大于32
我是這么想的,將字母和數字都轉化成對應的數字,
將連續的數字轉化成十進制形式,然后存在數組里;字母也存在數組里,這樣之后直接比較就可以
但是如何處理數字和字母的比較呢?數字“10000”轉化后大于“a”,我們可以在字母轉化時加入一個絕對大值,使得數字遠小于字母,但是字母之間可以比較
file[k1]=maxn+a[i]
maxn=1e10
詳細看代碼把
代碼:
#include <bits/stdc++.h> using namespace std; typedef long long ll; const ll maxn=1e10;const int maxx=130; ll file[maxx]; ll file2[maxx]; int n; int main() {ios::sync_with_stdio(false);cin>>n;string a;cin>>a;int k1=1;for(int i=0; i<a.length(); i++){if(a[i]>'9') file[k1]=maxn+a[i],k1++;//如果是字符串else {int j=i;file[k1]=(a[j]-'0');for(j=i+1; a[j]<='9'&&j<a.length(); j++)//存下數字 file[k1]=file[k1]*10+(a[j]-'0');k1++;i=j-1;}}while(n--){int k2=1;int f=1;memset(file2,0,sizeof(file2));string b;cin>>b;for(int i=0; i<b.length(); i++){if(b[i]>'9') file2[k2]=maxn+b[i],k2++;else {int j=i;file2[k2]=(b[j]-'0');for(j=i+1; b[j]<='9'&&j<b.length(); j++){file2[k2]=file2[k2]*10+(b[j]-'0');}k2++;i=j-1;}}for(int i=1;i<k1&&i<k2;i++)//比較大小 {if(file[i]<file2[i]) { f=0;cout<<"+"<<endl;break;}if(file[i]>file2[i]) {f=0;cout<<"-"<<endl;break;}if(file[i]==file2[i]) continue;}if(f==1&&k1==k2) cout<<"+"<<endl;//兩者相等 if(f==1&&k1>k2) cout<<"-"<<endl;if(f==1&&k1<k2) cout<<"+"<<endl;}return 0; }總結
以上是生活随笔為你收集整理的2020牛客国庆集训派对day4 Digits Are Not Just Characters的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2020-10-03
- 下一篇: Windows高手必备之十大免费系统工具