COJ 1285 STL中的map每日三水(无限个输入按哪个快捷键得输出)

本文介绍了一种通过读取多日收支数据确定最终首富的方法。使用C++中的map数据结构来跟踪每位富豪的累积财富,并在所有输入处理完毕后找出财富最多的富豪。此算法适用于无限输入的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[STL]首富

Time Limit: 3000 ms     Memory Limit: 65536 KB
Total Submit: 129     Accepted: 39

Description
世界上有钱的人很多,但总会被评出一个世界首富。比如Bill Gates就多年被评为世界首富。

但是首富的钱是不固定的,有时候赚钱,有时候赔钱。

现在我们知道很多很多首富的多日收支情况,请问最后谁是首富?

假设他们都白手起家,初始财产为0。

Input
单组数据输入。每组数据包括若干行。最多1000行。以EOF结束。
每行包括包括一个字符串和一个整数。 字符串A表示某富翁的名字,整数B表示富翁该日的收支金额。
(A的长度1 <= A.length() <= 50, -100000<=B<=100000)

Output
输出首富的名字和财产金额。

Sample Input
dreamfox 30
xkey 2324
pmonkey 2342
dreamfox 23123
xkey 2332
dreamfox 12455

Sample Output
dreamfox 35608

Hint
<map>

这道题还是比较容易的,但是有无限个输入的时候,不知道按哪个快捷键得到输出……
#include <iostream>
#include <map>
#include <deque>
#include <queue>
#include <stack>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <map>
#include <set>
using namespace std;
int main()
{
    map<string,int>p;
    map<string,int>::iterator it;
    string a,s;
    int i,j,max=-1000000000;
    char b[51];
    while(scanf("%s%d",b,&i)!=EOF)
    {
        a=b;
        it=p.find(a);
        if(it==p.end()) p[a]=i;
        else p[a]+=i;
    }
    for(it=p.begin();it!=p.end();it++)
        if(max<it->second)
        {
            s=it->first;
            j=it->second;
            max=it->second;
        }
    cout<<s<<' '<<j<<endl;
    return 0;
}


<think>好的,我现在要解决用户的问题:输入两个整数,输出它们中的最小值。首先,我需要理解用户的需求。用户可能刚开始学习编程,所以需要简单明了的解决方案。 用户提到输入是两个整型数,输出是它们的较小值。这可能涉及到比较操作,比如使用条件语句或者数学函数。首先,我得确定如何读取这两个整数。在C语言中,通常使用scanf函数,格式符是%d。然后比较这两个数,找出最小的那个。 接下来,我应该考虑不同的方法来实现这个功能。最常见的是使用if-else语句来比较两个数的大小。另一种方法是使用条件运算符(三元运算符),这样可以更简洁地写出代码。例如,min = (a < b) ? a : b; 这样一行代码就能解决问题。 还要注意变量类型是否正确,用户明确要求是整型,所以变量应该定义为int类型。输入输出是否正确处理,比如scanf的格式和printf的格式是否正确,特别是输出是否需要换行符。 另外,需要测试不同的情况,比如两个数相等的情况,或者一个是负数的情况。确保程序在各种情况下都能正确输出最小值。例如,输入5和3,输出应该是3;输入-2和0,输出是-2;输入7和7,输出7。 可能用户会犯的错误包括使用了错误的格式符,比如用%f代替%d,或者在比较时写反了符号。这时候程序可能无法正确读取输入或者比较错误。所以代码中需要确保这些细节正确。 最后,代码的结构要清晰,方便用户理解。可能用户是初学者,所以注释和简洁的代码结构对他们来说很重要。例如,分步骤说明输入、比较、输出的过程。 总结一下,解决这个问题的步骤是:定义两个整型变量,读取输入,比较这两个变量,输出较小的那个。可以选择条件语句或三元运算符来实现比较部分。确保输入输出正确,处理所有可能的测试情况。</think>### 解决思路 1. **输入处理**:用 `scanf` 读取两个整数 2. **比较逻辑**:通过条件判断或三元运算符找到最小值 3. **输出格式**:直接输出结果 --- ### 方法一:if-else 条件判断 ```c #include <stdio.h> int main() { int a, b; scanf("%d %d", &a, &b); // 读取两个整数 int min; if (a < b) { // 比较逻辑 min = a; } else { min = b; } printf("%d\n", min); // 输出结果 return 0; } ``` --- ### 方法二:三元运算符(更简洁) ```c #include <stdio.h> int main() { int a, b; scanf("%d %d", &a, &b); printf("%d\n", (a < b) ? a : b); // 直接比较并输出 return 0; } ``` --- ### 关键说明 1. **输入格式**: - 输入两个整数时,可以用空格或换行分隔,例如: ```bash 5 3 # 同一行输入 ``` 或 ```bash 5 # 第一行 3 # 第二行 ``` 2. **比较逻辑**: - 如果两数相等(如 `5` 和 `5`),输出任意一个均可 - 支持负数比较(如 `-2` 和 `0`,输出 `-2`) 3. **测试示例**: - **输入**:`7 3` → **输出**:`3` - **输入**:`-5 2` → **输出**:`-5` - **输入**:`10 10` → **输出**:`10` --- ### 易错点 1. **输入顺序**:确保 `scanf` 的变量地址顺序正确 2. **条件方向**:比较符号 `a < b` 不要写成 `a > b` 3. **输出换行**:`printf` 末尾的 `\n` 是常见OJ平台要求
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值