简单算法题(基础入门题)

第一题:

第一题的话我觉得对于刚入门的小白问题也不大,但就是要注意两个细节:10的16次方得用long long(int肯定不行,long的话没试过,但感觉有风险)。还有就是只能写2*a>b,千万不要写a>b/2,原因很简单,就是因为整数除法会向下取整。

示例代码(仅供参考):

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int main() {
    long long a,b;
    cin>>a>>b;
    if (2*a>b) {
        cout<<"Too Tang";
    }
    else{
        cout<<"Not Tang";
    }
    return 0;
}

第二题:

第二题的话读懂题也是相当简单(不信的朋友可以去找一些大模拟题 就知道我为什么这么说了),但这道题其实也有几个易踩坑点:这道题的字符串含有空格,所以我们不能采取常规的cin>>s输入(否则遇到空格就停止读取了,后面的输入都无效了),然后我用的是getline(cin,s)这个方法。还有就是解释一下:for(char c : s){......},这个叫范围for循环,用来遍历字符串s中的每个字符。

示例代码(仅供参考):

cpp 复制代码
#include<bits\stdc++.h>
using namespace std;

int main() {
    string s;
    getline(cin, s);   //不用cin>>s的原因是,这道题含有空格,而cin>>s遇到空格就要停止读取
    for (char c : s) {
        if (c>='A'&&c<='Z') {
            //在 C++ 中有一个非常重要的规则:当char参与数学运算时,它会被自动"升级"成int
            cout<<(char)(c+32);
        }
        if (c>='a'&&c<='z'||c==' ') {
             cout<<c;
        }
        //注意,删除数字这一操作我们压根就不用管他了,因为我们不输出数字就相当于删除数字了
    }
    return 0;
}

第三题:

对于第三题而言,其实是一种经典的模板变形题,不知道大家看出来没有。对于将学C语言的大一学弟们而言,你们老师今后肯定会跟你们出一道经典的例题:找出最大数(当然后续还会让你们进行排序,这是你们又将接触到冒泡排序,选择排序,插入排序,快速排序等等等等)。当然,我们言归正传,做这种找最大值的题,我们只需定义一个max(最大值),定义一个current(当前值),二者先置零,一旦我们的current>max,我们就去更新最大值(即把我们的current的值赋给我们的max),然后不断迭代,直到over。

示例代码(仅供参考):

cpp 复制代码
#include<bits/stdc++.h>
using  namespace std;

int main() {
    int n;
    cin>>n;
    int max_len = 0;     // 历史最长连续 1 的个数
    int current_len = 0; // 当前连续 1 的个数
    for(int i=0;i<n;i++) {
        int a;
        cin>>a;
        if (a==1) {
            current_len++;
            if (current_len>max_len) {
                max_len=current_len;
            }
        }
        else {
            current_len=0;  //
        }
    }
    cout<<max_len<<endl;
    return 0;
}

第四题:

第四题的话更简单,只要你会计数,就能做,我就不再介绍这道题了。

示例代码(仅供参考):

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int main() {
    int n;
    long long count=0;
    long long x;
    cin>>n;
    string op;
    for (int i=1;i<=n;i++) {
        cin>>op>>x;
        if (op=="in")
            count+=x;
        if (op=="out")
            if (count-x>=0)
            count-=x;
        cout<<count<<"\n";
    }
    return 0;
}

第五题:

第五题的话有点意思,做法也有很多。我来说说我的想法:我开了个计数器数组,并初始化为0,因为这道题是经典的**小值域频次统计题,**无脑用计数器数组来做就行了。

示例代码(仅供参考):

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int main() {
    int n,m;
    int cnt[501]={0};   //开一个计数器数组,初始化为全0
    cin>>n;
    while (n-->0) {
        cin>>m;
        for (int i=1;i<=m;i++) {
            int c;
            cin>>c;
            cnt[c]++;   //对应类别的计数器+1
        }
    }
    int most_id=0;
    int max_count=0;
    for (int i=1;i<=500;i++) {
        if (cnt[i]>max_count) {
            max_count=cnt[i];
            most_id=i;
        }
    }
    cout<<most_id<<" "<<max_count<<endl;
    return 0;
}

第六题:

第六题其实也非常简单。因为他已经明确规定了车牌号码只能是7位,而且他还在提示你快用字符串(因为题中说了允许出现前导零)。

示例代码(仅供参考):

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin>>n;
    while (n-->0) {
        string s;
        cin>>s;
        int sum1 = 0, sum2 = 0;
        //前4位平方和
        for (int i=0;i<4;i++) {  //C++中string的下标是从0开始的
            int num=s[i]-'0';    //把字符形式的数字变成真正的整数数字
            sum1+=num*num;
        }
        //后三位立方和
        for (int i=4;i<7;i++) {
            int num=s[i]-'0';
            sum2+=num*num*num;
        }
        if (sum1==sum2) {
            cout<<"Lucky Number"<<endl;
        }
        else {
            cout<<"Normal Number"<<endl;
        }
    }
    return 0;
}
相关推荐
Q一件事1 小时前
RWEQ计算——Wf因子
算法
zander2581 小时前
LeetCode 64. 最小路径和
算法·深度优先
find1star10 小时前
LeetCode 141:环形链表
java·算法·leetcode·链表
迅翼SwiftWing10 小时前
编队系列(总)|固定翼编队如何实现稳定飞行?通信架构、协同算法与工程约束深度解析
算法·架构
LB211210 小时前
力扣160 21 86
算法·leetcode·职场和发展
Tairitsu_H10 小时前
[C++] 深入理解红黑树:封装set与map
开发语言·c++·set·map·红黑树·模拟实现
小智老师PMP11 小时前
2026深度解析|PMP第八版与NPDP核心侧重点本质区别(管理类证书怎么选)
开发语言·分布式·算法·职场和发展·产品经理
HugoStudio_SWAN11 小时前
洛谷 B4450 / B3867 / B3923 智慧购物、储蓄与做题——从程序到生活
c++·学习·程序人生·算法·生活
a1879272183111 小时前
【算法】动态规划第二篇:双序列 DP 三课——继承、计步与断链
算法·leetcode·动态规划·dp·回溯·暴力·算法讲解