写点什么

牛客刷题系列之进阶版

作者:雪芙花
  • 2022-10-20
    湖南
  • 本文字数:1334 字

    阅读完需:约 1 分钟

很多小伙伴为了刷题发愁今天为大家推荐一款刷题神奇哦:刷题面试神器牛客各大互联网大厂面试真题。从基础到入阶乃至原理刨析类面试题 应有尽有,赶快来装备自己吧!助你面试稳操胜券,solo 全场面试官

一:参数解析

1.1 题目


[题目链接](参数解析_牛客题霸_牛客网 (nowcoder.com))

1.2 解析与代码

#include <iostream>#include<string>#include<vector>using namespace std;
void process(string& s){ string tem; bool flag = false; //还没有进入“ ,或者已经结束进入了 vector<string> v; for(int i=0;i<s.size();i++) { if(s[i] == '"') { flag = !flag; } else if(s[i] == ' ' && !flag) { v.push_back(tem); tem=""; } else tem+=s[i]; } v.push_back(tem); cout<<v.size()<<endl; for(int i=0;i<v.size();i++) { cout<<v[i]<<endl; }}int main() { string s; while (getline(cin,s)) { // 注意 while 处理多个 case process(s); }}
复制代码


  1. 先全部获取,然后依次处理

  2. 一个一个字符来进行处理,不容易出错

  3. 通过 flag 来判断是否进入了 “ ”内,假如进入了:空格可以被忽略

  4. 将处理好的字符串放入 vector 容器中,方便管理

1.3 总结和反思

其实这道题是我第二次做了,但还是没有完全 ac,原因就是因为自己还是在一个空格一个空格的来区分字符串,并没有清楚的认识到一个字符一个字符来处理字符串其实是更好的选择


  • 反思:


以后遇到处理字符串的问题,尽量在字符层面上细致的处理。

二:幸运的袋子

2.1 题目


2.2 解析与代码

#include<iostream>#include<algorithm>using namespace std;int get(int* arr, int n, int pos, int add,        int multi) { //pos:访问到的位置   add:加到了多少  multi; 乘到了多少    int count = 0;    for (int i = pos; i < n; i++) {        add += arr[i];        multi *= arr[i];
if (add > multi) { //假如add > multi , 该条件满足,并且往下面找满足的条件 count += 1 + get(arr, n, i + 1, add, multi); } else if (arr[i] == 1) //假如arr[i]==1 ,则该条件无效, 向后面找寻有效条件 count += get(arr, n, i + 1, add, multi);
else break;
add -= arr[i]; multi /= arr[i]; while (i < n - 1 && arr[i] == arr[i + 1]) { //将相同项移出,不再假如循环 i++; } } return count;
}int main() { int n; cin >> n; int arr[n]; for (int i = 0; i < n; i++) { cin >> arr[i]; } sort(arr, arr + n); //先将数组排序 cout << get(arr, n, 0, 0, 1);

return 0;}
复制代码


  1. 利用到了一个数学结论: 对于任意两个正整数 a,b 如果满足 a+b>a*b,则必有一个数为 1.

  2. 基于这个结论,我们先将数组排好序,进入函数

  3. 根据情况依次递归

  4. 将相同项移出,不再假如循环

总结与反思

递归的题还是找不到思路,得多练

发布于: 刚刚阅读数: 3
用户头像

雪芙花

关注

还未添加个人签名 2022-04-28 加入

还未添加个人简介

评论

发布
暂无评论
牛客刷题系列之进阶版_c_雪芙花_InfoQ写作社区