笔试练习day5

游游的you(简单)(贪心,模拟)

游游的you__牛客网 (nowcoder.com)

链接:https://www.nowcoder.com/questionTerminal/cd117803b3364b218a8b3dcc498dee25?page=1&onlyReference=false
来源:牛客网

游游现在有a个’y’,b个’o’,c个’u’,他想用这些字母拼成一个字符串。

三个相邻的字母是"you"可以获得2分,两个相邻的字母是"oo",可以获得1分。

问最多可以获得多少分?

输入描述:
第一行一个整数qqq,代表询问次数。
接下来qqq行,每行三个正整数a,b,ca,b,ca,b,c,用空格隔开。
1≤q≤1051\leq q \leq 10^51≤q≤105
1≤a,b,c≤1091\leq a,b,c \leq 10^91≤a,b,c≤109
输出描述:
输出qqq行,代表每次询问的答案。

示例1

输入

3
1 1 1
2 3 2
1 5 2

输出

2
4
5

说明

第一次询问,可以拼出"you",获得2分。
第二次询问,可以拼出"oyouyou",获得4分。

第三次询问,可以拼出"uooooyou",获得5分。

代码

#include <iostream>
using namespace std;

int y,o,u;
int main() {
    int n;
    cin>>n;
    while(n--)
    {
        cin>>y>>o>>u;
        int sum=0;
        int k=min(y,o);
        k=min(k,u);
        sum+=2*k;
        y-=k;
        o-=k;
        u-=k;
        if(o>=2)
        sum+=o-1;
        cout<<sum<<endl;
    }
}

NC398 腐烂的苹果(中等)(多源bfs)

腐烂的苹果_牛客题霸_牛客网 (nowcoder.com)

描述

给定一个 𝑛×𝑚 n×m 的网格,其中每个单元格中可能有三种值中的一个 0 , 1 , 2。

其中 0 表示这个格子为空、1 表示这个格子有一个完好的苹果,2 表示这个格子有一个腐烂的苹果。

腐烂的苹果每分钟会向上下左右四个方向的苹果传播一次病菌,并导致相邻的苹果腐烂。请问经过多少分钟,网格中不存在完好的苹果。如果有苹果永远不会腐烂则返回 -1

数据范围: 1≤𝑛,𝑚≤1000 1≤n,m≤1000 ,网格中的值满足 0≤𝑣𝑎𝑙≤2 0≤val≤2

示例1

输入:

[[2,1,1],[1,0,1],[1,1,1]]

返回值:

4

示例2

输入:

[[2,1,0],[1,0,1],[0,0,0]]

返回值:

-1

代码

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param grid int整型vector<vector<>> 
     * @return int整型
     */
     int dx[4]={0,0,1,-1};
     int dy[4]={1,-1,0,0};
    int rotApple(vector<vector<int> >& grid) {
        int n,m;
        n=grid.size();
        m=grid[0].size();

        queue<pair<int,int>> q;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(grid[i][j]==2)
                q.push({i,j});
            }
        } 
        int step=0;
        while(q.size())
        {
            int sz=q.size();
            step++;
            while(sz--)
            {
                int i=q.front().first;
                int j=q.front().second;
                q.pop();
                for(int k=0;k<4;k++)
                {
                    int x=dx[k]+i,y=dy[k]+j;
                    if(x>=0&&x<n&&y>=0&&y<m&&grid[x][y]==1)
                    {
                        grid[x][y]=2;
                        q.push({x,y});
                    }
                }
            }
        }

        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(grid[i][j]==1)
                return -1;
            }
        } 
        return step-1;
    }
};

JZ62 孩子们的游戏(圆圈中最后剩下的数)(中等)(动态规划,约瑟夫环问题)

孩子们的游戏(圆圈中最后剩下的数)_牛客题霸_牛客网 (nowcoder.com)

描述

每年六一儿童节,牛客都会准备一些小礼物和小游戏去看望孤儿院的孩子们。其中,有个游戏是这样的:首先,让 n 个小朋友们围成一个大圈,小朋友们的编号是0~n-1。然后,随机指定一个数 m ,让编号为0的小朋友开始报数。每次喊到 m-1 的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0… m-1报数…这样下去…直到剩下最后一个小朋友,可以不用表演,并且拿到牛客礼品,请你试着想下,哪个小朋友会得到这份礼品呢?

img

数据范围:1≤𝑛≤50001≤n≤5000,1≤𝑚≤100001≤m≤10000

要求:空间复杂度 𝑂(1)O(1),时间复杂度 𝑂(𝑛)O(n)

示例1

输入:

5,3

复制

返回值:

3

复制

示例2

输入:

2,3

复制

返回值:

1

复制

说明:

有2个小朋友编号为0,1,第一次报数报到3的是0号小朋友,0号小朋友出圈,1号小朋友得到礼物  

示例3

输入:

10,17

复制

返回值:

2

代码

class Solution {
public:
    int LastRemaining_Solution(int n, int m) {
        // write code here
        int dp=0;
        for(int i=1;i<=n;i++)
        {
            dp=(dp+m)%i;
        }
        return dp;
    }
};

复制

返回值:

2


## 代码

```c++
class Solution {
public:
    int LastRemaining_Solution(int n, int m) {
        // write code here
        int dp=0;
        for(int i=1;i<=n;i++)
        {
            dp=(dp+m)%i;
        }
        return dp;
    }
};
  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Perl编程语言是一种强大的脚本编程语言,适用于各种任务和领域,包括文本处理、系统管理、网络编程等。下面是一个Perl编程的笔试练习题的解答: 题目:编写一个Perl脚本,统计一个文本文件中每个单词出现的次数,并按照频率从高到低的顺序输出。 解答: ```perl #!/usr/bin/perl use strict; use warnings; my $filename = 'text.txt'; open(my $file, "<", $filename) or die "无法打开文件:$!"; my %word_count; while (my $line = <$file>) { chomp($line); my @words = split(' ', $line); foreach my $word (@words) { $word =~ s/[^a-zA-Z]//g; # 只保留字母字符 next if $word eq ''; # 跳过空字符串 $word_count{lc($word)}++; } } close($file); foreach my $word (sort { $word_count{$b} <=> $word_count{$a} } keys %word_count) { print "$word: $word_count{$word}\n"; } ``` 这个Perl脚本首先打开指定的文本文件,并使用`<`操作符将文件内容读入到循环变量`$line`中。在每次迭代中,我们将每一行字符串使用空格进行分割,得到一个单词数组`@words`。接下来,我们使用一个循环遍历`@words`数组中的每个单词,并进行一些处理: 1. 使用正则表达式`s/[^a-zA-Z]//g`去除单词中的非字母字符; 2. 使用`next if $word eq '';`跳过空字符串; 3. 使用`lc($word)`将单词转换为小写字母形式,并将其作为哈希表`%word_count`的键,将该单词的出现次数加一。 在循环结束后,脚本将按照单词出现次数从高到低的顺序对`%word_count`进行排序,并循环打印输出每个单词和其出现次数。 以上是对Perl编程的笔试练习题的参考解答,希望对您有帮助。如果有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值