前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >牛客刷题系列之进阶版

牛客刷题系列之进阶版

作者头像
雪芙花
发布2022-10-31 18:07:34
1710
发布2022-10-31 18:07:34
举报
文章被收录于专栏:雪芙花雪芙花

一:参数解析

1.1题目

image-20220927091758648
image-20220927091758648

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

1.2 解析与代码

代码语言:javascript
复制
#include <iostream>
#include<string>
#include<vector>
using namespace std;

void process(string&amp; 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] == ' ' &amp;&amp; !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 题目

image-20220927092606733
image-20220927092606733

2.2解析与代码

代码语言:javascript
复制
#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 &amp;&amp;
                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;
}

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

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

根据情况依次递归

代码语言:javascript
复制
1. 假如add > multi , 该条件满足,并且往下面找满足的条件
2. 假如arr[i]==1 ,则该条件无效, 向后面找寻有效条件
3. 假如arr[i]==1 ,则该条件无效, 向后面找寻有效条件

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

总结与反思

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一:参数解析
    • 1.1题目
      • 1.2 解析与代码
        • 1.3总结和反思
    • 二:幸运的袋子
      • 2.1 题目
        • 2.2解析与代码
          • 总结与反思
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档