代码如下
using namespace std;
struct Prisdent
{
int number;
string poll;
};
struct Prisdent prisdent[21];
int main()
{
int n;
cin >> n;
for(int i = 1; i <= n; i++)
{
cin >> prisdent[i].poll;
prisdent[i].number = i;
}
P = prisdent[1];
for(int i = 1; i <= n-1; i++)
for(int j = 1; j <= n-i; j++)
{
if(prisdent[j].poll > prisdent[j+1].poll)
swap(prisdent[j], prisdent[j+1]);
}
cout << prisdent[1].number << endl << prisdent[1].poll << endl;
return 0;
}
样例过了,但是 WA 了 3 个,不清楚为什么,求教,谢谢!
问题出在 string字符串之间的运算符“>”,大于号并不能实现理想中的字符串大小比较(长度等等因素会造成影响),我测试了一下>的情况,下面这张图片就是一个很好例子;
你可以试着把你排序之后的结构体数组进行输出,看看排序会出现什么问题
建议你自己写一个比较函数,以下是我的代码,仅供参考
#include <iostream> #include <string> using namespace std; int cmp(string a,string b) { int len1=a.size(); int len2=b.size(); if(len1>len2) return 1; else if(len1<len2) return 0; else { for(int i=0;i<len1;i++) { if(a[i]>b[i]) return 1; else if(a[i]==b[i]) continue; else return 0; } return 0; } } int main() { string temp; string big="+"; int n,bigI=0; cin >> n; for (int i = 0; i < n; i++) { cin>>temp; if(cmp(temp,big)) { big.clear(); bigI=i+1; big=temp; } } cout<<bigI<<endl<<big<<endl; return 0; }
@Conan-jine: 谢谢
这个长度问题能具体解释一下吗?
我说一下我怎么想的 :arr1 = 100010 长度为 6 arr2 = 10000100 长度为 8 .
在arr1 和 arr2 比较时,由于arr1 长度小于 arr2 ,所以在两者比较时,只比较前 6 位.
您看是这样吗 ?
@goalltheway: 可能是,不清楚,你可以写程序实践一下
@Conan-jine: 嗯好
struct做法:数组、vector、array均类似
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxn=1e6=10;
struct node
{
ll num;
string s;
}p[maxn];
bool cmp(node a,node b)
{
ll la=a.s.size(),lb=b.s.size();
if(la>lb)
{
return 1;
}
else if(la<lb)
{
return 0;
}
else
{
return a.s>b.s;
}
}
int main()
{
ll t;
scanf("%lld",&t);;
for(ll i=0;i<t;i++)
{
p[i].num=(i+1);
cin>>p[i].s;
}
sort(p,p+t,cmp);
cout<<p[0].num<<endl<<p[0].s<<endl;
}
感谢