2 条题解
-
0
此题唯一难在排序。由于数的个数不超过 ,可以使用冒泡排序,排序函数如下:
bool cmp(string a,string b,int Alen,int Blen){ if(Alen!=Blen)return Alen>Blen;//先比较整数部分长度 int len=min(a.size(),b.size()); for(int i=0;i<len;i++){ if(a[i]>b[i])return 1;//大于 if(a[i]<b[i])return 0;//小于 if(a[i]==b[i])continue; } return a.size()>b.size();//全部相同比较长度 } void bubble(){//冒泡排序 for(int i=1;i<cnt;i++){ for(int j=i+1;j<=cnt;j++){ if(cmp(num[i].num,num[j].num,num[i].INTlen,num[j].INTlen)) swap(num[i],num[j]); } } }
对数的处理:
for(int i=0;i<s.size();i++){ if(isdigit(s[i])){ num[cnt].num+=s[i]; if(f==0)num[cnt].INTlen++;//有了小数点不再计入整数部分长度 } else if(s[i]=='.')num[cnt].num+=s[i],f=1;//已有小数点 else if(isdigit(s[i-1]))num[cnt].ALLlen=num[cnt].num.size(),cnt++,f=0;//总长度,是否小数点有变量 f 恢复 }
综合代码如下:
#include<bits/stdc++.h> using namespace std; int cnt=1; string s; bool f; struct node{ int ALLlen,INTlen; string num; }num[10005]; bool cmp(string a,string b,int Alen,int Blen){ if(Alen!=Blen)return Alen>Blen; int len=min(a.size(),b.size()); for(int i=0;i<len;i++){ if(a[i]>b[i])return 1; if(a[i]<b[i])return 0; if(a[i]==b[i])continue; } return a.size()>b.size(); } void bubble(){ for(int i=1;i<cnt;i++){ for(int j=i+1;j<=cnt;j++){ if(cmp(num[i].num,num[j].num,num[i].INTlen,num[j].INTlen)) swap(num[i],num[j]); } } } int main(){ ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); getline(cin,s); for(int i=0;i<s.size();i++){ if(isdigit(s[i])){ num[cnt].num+=s[i]; if(f==0)num[cnt].INTlen++; } else if(s[i]=='.')num[cnt].num+=s[i],f=1; else if(isdigit(s[i-1]))num[cnt].ALLlen=num[cnt].num.size(),cnt++,f=0; } bubble(); cout<<num[cnt].num; return 0; }
已 AC,请放心
-
0
#include<bits/stdc++.h> using namespace std; //输入保证正确 //输出看仔细 //所有情况都测 //数组定义,保证正确 string s; bool check(string s1,string s2) { int f = 0,zs2=0,xs2=0,f1=0,f2=0; for(int i = 0;i < s1.size();i ++) { if(s1[i]=='.') { f1=i; } } for(int i = 0;i < s2.size();i ++) { if(s2[i]=='.') { f2=i; } } if(f1==0) f1=s1.size(); if(f2==0) f2=s2.size(); if(f1!=f2) return f1<f2; for(int i = 0;i < f1;i ++) { if(s1[i]<s2[i]) return true; if(s1[i]>s2[i]) return false; } for(int i = f1+1;i < min(s1.size(),s2.size());i ++) { if(s1[i]<s2[i]) return true; if(s1[i]>s2[i]) return false; } return s1.size()<s2.size(); } int main() { getline(cin,s); string t = "" , ma=""; s=s+'!'; for(int i = 0;i < s.size();i++) { if(isdigit(s[i])||s[i]=='.') t=t+s[i]; else { if(t!=""&&check(ma,t)) ma=t; t=""; } // cout<<t<<" "; } cout<<ma; return 0; }
- 1
信息
- ID
- 460
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 40
- 已通过
- 24
- 上传者