iHandy-2019-笔试编程真题

1.最后一词

题目描述

给定一个可能由任意数量的字母和空格组成的字符串序列,序列中每个只包含字母,不包含任何空格的子序列称为一个单词,请输入一个序列中最后一个单词的长度。

示例:

输入:carep diem

输出:4

 

方案1:对于cin读取时,遇到空格、回车、tab会结束读取,因此可使用该性质,直接对数据进行读取,然后最后一个读取的就是最后一个单词。

 

#include <iostream>

#include <string>

using namespace std;

int main(){

string str;

while(cin>>str);

return str.length();

}

 

方案2:getline()接受一个字符串,可以接收空格并输出。从字符串最后开始向前判断,遇到空格则停止;要考虑到只输入一个单词无空格的情况也就是最终i==0。

#include <iostream>

#include <string>

using namespace std;

 

int getLastLength(string str){

    int count = 0;

    if(!str.empty()){

        int i = str.size()-1;

        while(i>= 0 && str[i] != ' '){

            count++;

            i--;

        }

        if(i==0){   //考虑到输入为“Hole”这种情况

            count = str.size();

        }

         

    }

    return count;

}

int main(){

    string str;

    getline(cin,str);

    int result = getLastLength(str);

    cout<<result<<endl;

    return 0;

}

参考链接:

C++中getline()、get()等函数的用法

https://blog.csdn.net/JIEJINQUANIL/article/details/50802902

最后一词的解析:

https://www.nowcoder.com/questionTerminal/9eeeb5d680094dfca66251b958ecdcce

 

2.比大更大

题目描述:给定一列非负整数,求这些数连接起来能组成的最大的数。

输入描述

第一行n>0 是一个正整数,表示一共有n个输入,以后每行是一个非负整数,共有n行。

输出描述

n个输入的非负整数连接成的最大的数。

示例1:

输入:

6

9

8

7

65

4

3

输出:

9876543

 

示例2:

输入:

2

11

2

输出:

211

 

方案:由题意可知,返回结果可能非常大,因此需要返回一个字符串而不是整数。

因此,将读取的数据也保存为string,比较的是两字符a和b连接的两种方案a+b和b+a,最终结果则是将比较完成的数据连接输出即可。

注意:全为0的情况。

eg:示例2中a为11,b为2,则看做字符串,a+b为112,b+a为211,显然b+a> a+b.

#include <iostream>

#include <vector>

#include <string>

#include <algorithm>

using namespace std;

bool cmp(string& a,string& b){

    return (a+b) > (b+a);

}

int main(){

int n;

    cin >> n;

    vector<string> str(n,"");

    for (int i =0;i<n;i++){

        cin >> str[i];

    }

    sort(str.begin(), str.end(), cmp);

    string res;

   // for (auto c : str){

    //    res += c;

   // }

    for(int i=0;i<n;i++){

        res += str[i];

    }

    if(res[0] == '0'){

        cout<<0<<endl;

    }

    else{

cout << res <<endl;

    }

  return 0;

}

参考链接:

https://www.nowcoder.com/questionTerminal/8712c1e04b914d19a7e5e195c8c04fbb?f=discussion

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值