牛客周赛 Round 38做题笔记

一.题目链接登录—专业IT笔试面试备考平台_牛客网牛客网是互联网求职神器,C++、Java、前端、产品、运营技能学习/备考/求职题库,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力icon-default.png?t=N7T8https://ac.nowcoder.com/acm/contest/78292/A

题意:问加多少次可以把尾数变为0;

思路:(10-n%10)%10 可以直接求出结果

代码:

#include<iostream>
using namespace std;
int main(){
    int n;
    cin>>n;
    cout<<(10-n%10)%10;
    return 0;
}

二.题目链接

登录—专业IT笔试面试备考平台_牛客网牛客网是互联网求职神器,C++、Java、前端、产品、运营技能学习/备考/求职题库,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力icon-default.png?t=N7T8https://ac.nowcoder.com/acm/contest/78292/B

题意:统计前i位数有多少是9的倍数;

思路:暴力(由于数据范围过大,可以使用字符串存储)

代码:

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main() {
    string s;
    cin >> s;
    vector<int>a(s.length());
    a[0] = s[0] - '0';
    for (int i = 1; i < s.length(); i++)
    {
        a[i] = a[i - 1] + (s[i] - '0');
    }
    int cnt = 0;
    for (int i = 0; i < s.length(); i++)
    {
        if (a[i] % 9 == 0)
            cnt++;
    }
    cout << cnt;
    return 0;
}

三.题目链接

登录—专业IT笔试面试备考平台_牛客网牛客网是互联网求职神器,C++、Java、前端、产品、运营技能学习/备考/求职题库,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力icon-default.png?t=N7T8https://ac.nowcoder.com/acm/contest/78292/C

题意:产生k个回文串,且总字符数为n;

思路:a,b,c每三个循环一次,k>0,则输出双倍字符且n减去两个字符,k=0后则正常循环

代码:

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main() {
    int n, k;
    cin >> n >> k;
    int flag = 0;
    while (n--)
    {
        char s = 'a' + flag;
        if (k > 0)
        {
             cout << s << s;
             k--;
             n--;
         }
         else
             cout << s;
         flag++;
         if (flag == 3)
              flag = 0;

        }
    
    return 0;
}

 四.题目登录—专业IT笔试面试备考平台_牛客网牛客网是互联网求职神器,C++、Java、前端、产品、运营技能学习/备考/求职题库,在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升你的技术能力icon-default.png?t=N7T8https://ac.nowcoder.com/acm/contest/78292/D

题意:每相邻的两个数之间的差值要小于等于k,不满足条件可以插入新的数据

思路:第一种情况就是相邻的两个数满足条件,可以省略。第二种情况所有的差值都小于k,此时我们要插入一个新的数在末端,使得其等于k。第三种情况是,差值很大是k好多倍,用k来分割该数据,分割成(b[i]+k-1) / k - 1份。

代码:

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main() {
    int n, k;
    cin >> n >> k;
    vector<long long>a(n);
    vector<long long>b(n);
    b[0] = 0;
    long long  cnt = 0;
    long long flag = 0;
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
        if (i > 0)
            b[i] =abs( a[i] - a[i - 1]);
        if (b[i] > k)
        {
            cnt = cnt + (b[i]+k-1) / k - 1;
            flag++;
        }
        if (b[i] == k)
            flag++;

    }
    if (!flag)
        cnt++;
    cout << cnt;
    
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值