【华科考研机试题】最长&最短文本

题目

输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出。

解题思路

1.输入所有字符串(有空格不另算字符串)。
2.将char*字符串转换成string型。
3.由于map是自动排好序的,所以begin和end可以取到最小的地址和最大的后一个地址。

map <int,list<string>>m;//构造map
m[s.length].push_back(s);//map插入
list l = m.begin()->second();//map取最短
l = (--end())->second();//map取最长

4.将最长和最短的list输出即可。

难点

  1. 输入包含空格的字符串用gets或者getline。
  2. char*字符串转换成string字符串直接用等号。

代码

#include <bits/stdc++.h>
using namespace std;
int main(){
    string s;
    char c[1100];
    map <int, list<string>> m;
    int num;
    while(gets(c)){
        s = c; // char*转换成string
        m[s.length()].push_back(s);
    }
    list <string> l;
    list <string>::iterator it;

    l = m.begin()->second;//最短
    for(it = l.begin();it != l.end(); ++it){
        cout << *it << endl;
    }

    l = (--m.end())->second;//最长
    for(it = l.begin();it != l.end(); ++it){
        cout << *it << endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/zhangjiuding/p/10421372.html

时间: 2024-10-09 17:50:58

【华科考研机试题】最长&最短文本的相关文章

【华科考研机试题】阶乘

题目 输入n, 求y1=1!+3!+...m!(m是小于等于n的最大奇数) y2=2!+4!+...p!(p是小于等于n的最大偶数). 解题思路 打表算最快,不用每个数据都算一次. 复杂度 时间复杂度(输入的数据量O(m)) 空间复杂度O(1) 代码 #include <bits/stdc++.h> using namespace std; typedef long long ll; //实际上算到30的阶乘肯定溢出了 //但是没关系,题目给的肯定不是溢出的数据 ll jc[30]; //jc

1195.最长&amp;最短文本

题目描述: 输入多行字符串,请按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出. 输入: 输入包括多行字符串,字符串的长度len,(1<=len<=1000). 输出: 按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出. 样例输入: hello she sorry he 样例输出: he hello sorry #include<stdio.h> #include<string.h> usi

考研机试题(2014)

1.求一串数中大于1素数之和 输入输入个数  数字  不超过100个数 不超过10组 多组输入  0结束 例 输入 4 1 2 3 4 5 1 2 3 4 5 0 输出 5 10 #include <stdio.h> #define MAX 10 bool isPrime(int n){ //判断是否是素数 bool flag = true; if( n <=1) return false; for(int i = 2; i*i <= n; i++){ if(n % i == 0)

考研复试机试题(2010)

考研复试机试题(2010) 转载请标明出处:牟尼的专栏 http://blog.csdn.net/u012027907 解答: /* * 描述: 机试题A解答 * 作者: 张亚超 * 博客: 牟尼的专栏 http://blog.csdn.net/u012027907 * 日期: 2014/7/21 */ #include "stdio.h" #define Max 1000 int getEveSum(int num){ //求各位的数字和 int sum = 0; while(num

考研复试机试题(2009)

Problem A:请写一个程序,给出指定整数范围[a ,b]内所有的完数,一个数如果恰好等于除它本身外的所有因子之和,这个数就称为完数,例如6是完数,因为6=1+2+3. 输入说明:共一组数据,为两个正整数,分别表示a和b(1<a<b<10^5). 输出说明:指定范围内的所有完数,每个数占一行. 输入样本 1 100 输出样本 6 28 解答: /* * 描述: 机试题A解答 * 作者: 张亚超 * 博客: 牟尼的专栏 http://blog.csdn.net/u012027907 *

九度oj题目&amp;amp;吉大考研10年机试题全解

吉大考研机试2010年题目 题目一(jobdu1478:三角形的边).    http://ac.jobdu.com/problem.php?pid=1478 给出三个正整数,计算最小的数加上次小的数与最大的数之差. 题目分析: 简单题.能够用非常多方法解决 AC代码: #include<iostream> using namespace std; int main() {     int a,b,c,ma;     while(cin>>a>>b>>c){

1022: 淘金(2017年中南大学研究生复试机试题 )

1022: 淘金 时间限制: 1 Sec  内存限制: 128 MB提交: 205  解决: 75[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 在一片n*m的土地上,每一块1*1的区域里都有一定数量的金子.这一天,你到这里来淘金,然而当地人告诉你,如果你挖了某一区域的金子,上一行,下一行,左边,右边的金子你都不能被允许挖了.那么问题来了:你最多能淘金多少? 输入 对于每组数据,第一行两个数n,m,表示土地的长和宽(1<=n,m<=200) 接下来n行,每行m个数,表示每个区域

华为的一道机试题--等式变换

华为的一道机试题 (http://blog.csdn.net/zombie_slicer/article/details/37346025) 第三题:等式变换 输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立. 1 2 3 4 5 6 7 8 9 = X 比如: 12-34+5-67+89 = 5 1+23+4-5+6-7-8-9 = 5 请编写程序,统计满足输入整数的所有整数个数. 输入:       正整数,等式右边的数字 输出:       使该等式成立的个数 样

ASPNET服务端控件练习(一个机试题)

简单记录: 模糊查询的select语句的拼写 public List<Model.Student> GetWhereStudent(string name, string sub, string isG) { List<Web.Model.Student> lt = new List<Model.Student>(); string sql = "select * from SC_Student where studentName like @n and [e