PIPIOJ 1065 统计气球 (STL)

由于是简单题,第二遍做思路比较顺,中间卡了一下,提交时卡第二下。

//原错误答案
const int N = 1e3 + 7;
string s[N];//最开始写成string[N],滑稽
map<string, int >mp;
int main(){
	int n;
	while (scanf_s("%d", &n) != EOF) {
		for (int i = 0; i < n; i++) {
			scanf_s("%s", s[i]);//卡第二下
			mp[s[i]]++;
		}
		int cnt = 0;
		string S;
		map<string, int>::iterator it;
		for (it = mp.begin(); it != mp.end(); it++) {//卡的第一下
			if (cnt <= (*it).second) {
				cnt = (*it).second;
				S = (*it).first;
			}
		}
	    printf("%s",S);//第二下
	}
	return 0;
}

一.string

只有内置类型可以用scanf,因为string是一个类class,我一开始用string类型参数直接使用scanf,printf输入输出,出错。若要强行使用需用char类型参数,用string还是用cin,cout比较好

二.思路波动过程

思路在第一下卡了一小会,但还是想起来了迭代器,看来练的不够。虽然想起了迭代器的妙用但开始还是用错了。

for (int i = mp.begin(); i != mp.end(); i++) {//我这样写了,迭代器定义好了还用i干嘛,滑稽
			if (cnt <= (*it).second) {
				cnt = (*it).second;
				S = (*it).first;
			}
		}

此外,多次输入记得把map清空,我疏忽了。

//修改后
#include<bits/stdc++.h>
using namespace std;
map<string, int >mp;
int main(){
    int n;
    while (scanf("%d", &n) != EOF) {
        if (n == 0)break;
        mp.clear();//这步没意识到
        string color;
        for (int i = 0; i < n; i++) {
            cin>>color;
            mp[color]++;
        }
        int cnt = 0;
        string S;
        map<string, int>::iterator it;
        for (it = mp.begin(); it != mp.end(); it++) {
            if (cnt <= (*it).second) {
                cnt = (*it).second;
                S = (*it).first;
            }
        }
        cout<<S<<endl;
    }
    return 0;
}

做完后忽然想到若气球数目一样输出-1该怎么做,多开一个数组?没细想,略。

在不同气球数量相等的情况下,由于使用了<=运算符,我想不应该输出最后一个迭代器指向的值吗,为何交换输入顺序后还是一个颜色,后想到map按字符串排序了,跟怎么输入没关系。(滑稽)

2020/1/25 -> 2020/2/15

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值