气球升起来

7-1 气球升起来 (15 分)

程序设计竞赛时,赛场升起各色气球多么激动人心呀!志愿者送气球忙得不亦乐乎,观战的某人想知道目前哪种颜色的气球送出最多。

输入格式:

测试数据有多组,处理到文件尾。每组数据先输入一个整数n(0<n≤5000)表示分发的气球总数。接下来输入n行,每行一个表示颜色的字符串(长度不超过20且仅由小写字母构成)。

输出格式:

对于每组测试,输出出现次数最多的颜色。若出现并列的情况,则只需输出ASCII码值最小的那种颜色。

输入样例:

3
pink
red
pink

输出样例:

pink

这题方法是:录入完成后排下序,从后往前找 

#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long ll;
struct name {
    string nu;
    int number;
}nas[50005];
void sorts(int l, int r) {//手写的快排,为了适应该题。也可以用qsort
    int p;
    if (l < r) {
        p = l;
        int index = p + 1;
        for (int i = index; i <= r; i++) {
            if (nas[i].number < nas[p].number) {
                struct name t = nas[i];
                nas[i] = nas[index];
                nas[index] = t;
                index++;
            }
            else if (nas[i].number == nas[p].number) {
                if (nas[i].nu < nas[p].nu) {
                    struct name t = nas[i];
                    nas[i] = nas[index];
                    nas[index] = t;
                    index++;
                }
            }
            else continue;
        }
        struct name t = nas[p];
        nas[p] = nas[index - 1];
        nas[index - 1] = t;
        p = index - 1;
        sorts(l, p - 1);
        sorts(p + 1, r);
    }
}
int main()
{
    //ios::sync_with_stdio(false);
    int n;
    while (scanf("%d", &n) != EOF) {
        memset(nas, 0, sizeof(nas));
        string maxname;
        int low = 0;
        for (int i = 0; i < n; i++) {
            int ans = 1;
            string ps;
            cin >> ps;
            for (int j = 0; j < low; j++) {
                if (nas[j].nu == ps) {
                    ans = 0;
                    nas[j].number++;
                    break;
                }
            }
            if (ans == 1) {
                nas[low].nu = ps;
                nas[low].number++;
                low++;
            }
        }
        /*for (int u = 0; u < 2; u++) {
            cout << nas[u].nu << endl;
        }*/
        //cout << endl;
        sorts(0, low - 1);
        int qw = nas[low - 1].number;
        int place = low - 1;
        for (int u = low - 2; u >= 0; u--) {
            if (nas[u].number == qw) {
                place = u;
                continue;
            }
            else if (nas[u].number < qw) {
                break;
            }
        }
        cout << nas[place].nu << endl;
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿白|

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值