每日总结——2019/7/15

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43271086/article/details/96031720

1.水果分类

李老板很有智慧,在春天的时候去摆摊卖应季水果,例如荔枝,菠萝,桃子啥的。

但李老板是个电脑白痴,他用收银机总是找不到客人买的水果。

所以要求你帮他进行水果分类。

给你 N 种水果,每个水果都有一个名字和一个类别,都是字符串且长度不超过 20。

输入

输入只有一组。

第一行是 n。 (1 ≤ n ≤ 100)

接下来 n 行。

每行输出两个字符串,以空格相隔,分别表示 名字 和 类别。

(1 ≤ |all_string| ≤ 20)

输出

输出参照样例。

类别 和 名字 均按照字典序排序输出。

格式为 三个空格 + “|---” + 一个空格 + 字符串。

样例输入

7
apple red
pineapple yellow
banana yellow
leechee red
peach yellow
watermelon yellow
yangtao green

样例输出

green
   |--- yangtao
red
   |--- apple
   |--- leechee
yellow
   |--- banana
   |--- peach
   |--- pineapple
   |--- watermelon

总结:

#include<iostream>
#include<map>
#include<set>
using namespace std;
//map容器函数中嵌套一个set容器函数,因为在map中一个键值对应一个权值,但是题目输出的是一个
//对多个的关系,所以需要用set进行存储多个的操作
map<string,set<string> >mp;
int main(int argc, char const *argv[]) {
  string aname,bzhonglei;
  int n;
  cin>>n;
  for(int i=0;i<n;i++){
    cin>>aname>>bzhonglei;
    mp[bzhonglei].insert(aname);
  }
  //迭代器的定义
  for(map<string,set<string> >::iterator it =mp.begin();it!=mp.end();it++ ){
    //给set在定义一个迭代器
    set<string>::iterator s_it;
    cout<<it->first<<endl;
    //让s_it指向it第二个也就是set容器的开始,然后开始进行遍历
    for(s_it=(it->second).begin();s_it!=(it->second).end();s_it++){
      cout<<" |--- "<<*s_it<<endl;
    }
  }
  return 0;
}

2,消息队列

题目描述

我们都知道,计算机储存消息是按照优先级输出的。

我们定义以下规则:

    1. 每个消息,都有两个属性,分别是数据和优先级。

    2. 存在一个空间,可以储存已有的消息。

    3. 当遇到一个 “PUSH” 指令,后面会跟着 一个数据(字符串), 和一个优先级(整数,越大越优先)。

    4. 当遇到一个 “POP” 指令,若空间中有信息,则输出该信息的数据,否则输出"NULL!"。

    5. 如果两个消息,优先级一样,则越早输入的数据越优先。

详情参照样例。

输入

输入只有一组测试数据,行数未知,保证不超过 50000 行。

每一行一个命令。

1. "PUSH Str N" 表示需要向空间添加进一个 优先级为 N, 数据为 Str 的消息,不需要输出。

2. "POP" 表示需要输出空间中的一条消息的数据,若为空则输出"NULL!"。

(0 < |Str| < 101, 0 < N < 1001)

输出

按照每一条指令的要求输出。

PUSH 指令不需要有任何输出

样例输入

POP
PUSH First 2
POP
PUSH Second 2
PUSH THIRD 100
PUSH FOURTH 2
POP
POP
POP
POP
PUSH asddf 103
POP

样例输出

NULL!
First
THIRD
Second
FOURTH
NULL!
asddf

总结:利用优先队列来求解

#include <iostream>
#include <cstring>
#include <string>
#include <queue>
using namespace std;
string op,data;
int vip;
//本题需要创建一个结构体,然后进行存储
struct node{
  string data;
  int vip;
}temp;
bool operator < (node a,node b){
  if(a.vip<b.vip){
    return true;
  }
  else
    return false;
}
int main(int argc, char const *argv[]) {
  //优先队列也可以是由struct类型的,但是需要进行运算符重载,因为结构体中有多个不同类型
  //的数据,所以需要进行重载
  priority_queue<node>q;
  while(cin>>op){
    if(op=="PUSH"){
      cin>>data>>vip;
      temp.data=data;
      temp.vip=vip;
      q.push(temp);
    }
    else{
      if(q.empty()) cout<<"NULL!"<<endl;
      else{
        temp=q.top();
        cout<<temp.data<<endl;
        q.pop();
      }
    }
  }
  return 0;
}

再接再厉吧!!!!!!

猜你喜欢

转载自blog.csdn.net/weixin_43271086/article/details/96031720