首页 新闻 搜索 专区 学院

宇宙总统 C/C++

0
悬赏园豆:15 [已解决问题] 解决于 2020-08-09 14:28


代码如下

include<iostream>

include<cstring>

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 个,不清楚为什么,求教,谢谢!

goalltheway的主页 goalltheway | 初学一级 | 园豆:133
提问于:2020-08-08 16:13
< >
分享
最佳答案
0

问题出在 string字符串之间的运算符“>”,大于号并不能实现理想中的字符串大小比较(长度等等因素会造成影响),我测试了一下>的情况,下面这张图片就是一个很好例子;

收获园豆:15
Conan-jine | 小虾三级 |园豆:1188 | 2020-08-08 23:27

你可以试着把你排序之后的结构体数组进行输出,看看排序会出现什么问题

Conan-jine | 园豆:1188 (小虾三级) | 2020-08-08 23:28

建议你自己写一个比较函数,以下是我的代码,仅供参考

#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 | 园豆:1188 (小虾三级) | 2020-08-08 23:30

@Conan-jine: 谢谢

goalltheway | 园豆:133 (初学一级) | 2020-08-09 14:22

这个长度问题能具体解释一下吗?

我说一下我怎么想的 :arr1 = 100010 长度为 6       arr2 = 10000100  长度为 8 .

在arr1 和 arr2 比较时,由于arr1 长度小于 arr2 ,所以在两者比较时,只比较前 6 位.

您看是这样吗 ?

goalltheway | 园豆:133 (初学一级) | 2020-08-09 14:28

@goalltheway: 可能是,不清楚,你可以写程序实践一下

Conan-jine | 园豆:1188 (小虾三级) | 2020-08-09 15:04

@Conan-jine: 嗯好

goalltheway | 园豆:133 (初学一级) | 2020-08-09 15:05
其他回答(1)
0

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;
}
Drophair | 园豆:220 (菜鸟二级) | 2020-08-14 14:23

感谢

支持(0) 反对(0) goalltheway | 园豆:133 (初学一级) | 2020-09-02 14:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册