《算法笔记知识点记录》第三章——入门模拟(1)

简介: 《算法笔记知识点记录》第三章——入门模拟(1)

☘前言☘

咕咕咕、鸽子精又回来了。🐒

今天是我开坑的第六次次发文,大家最近应该都在忙期末把?希望看到的你们可以有时间刷刷题。


今天就要开始解决实际问题了,可能是一个简单的问题从简单开始,一步步走到最后,你我皆超神。如果我有哪些没有讲清楚的,欢迎大家联系我,你提出的问题是我修改完善的基础,万分感谢。

欢迎大家加入我的打卡队列,如果你刷完了对你有帮助请你评论一个打卡。


如果觉得这个文章有用还希望大家交出素质三连呀。


🧑🏻作者简介:一个从工业设计改行学嵌入式的年轻人

✨联系方式:2201891280(QQ)

📔源码地址:https://gitee.com/xingleigao/algorithm-notes

⏳全文大约阅读时间: 80min


文章目录

 ☘前言☘

 🍭1.基础知识点

            🐶1.1简单模拟

            🎧1.2 查找元素

 🏑1.3 图形输出

 🏏1.4 日期处理

 🏂1.5 进制转换

 🥍1.6 字符串处理

 🐳课后习题

🍭1.基础知识点

学完了所有的C++入门知识,我们就具备了开始解决问题的能力。需要去习惯不同题型的出题习惯,然后才能不断完善直至超神。今天先看两个比较简单的例子。


🐶1.1简单模拟

模拟就是一类题目怎么说你就怎么做的题目,如果不牵扯到算法就是纯粹的模拟,也叫简单模拟,考察的主要是coding能力。 接下来我们看两道题:


【PAT B1001】 害死人不偿命的(3n+1)猜想 (15 分)

题目描述


卡拉兹(Callatz)猜想:

对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。这样一直反复砍下去,最后一定在某一步得到 n=1。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证 (3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……

我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过 1000 的正整数 n,简单地数一下,需要多少步(砍几下)才能得到 n=1?

输入格式:


每个测试输入包含 1 个测试用例,即给出正整数 n 的值。

输出格式:


输出从 n 计算到 1 需要的步数。

样例输入


3


样例输出


5


解题思路


读入题目给出的n后,用while循环语句反复判断n是否为1:


如果n为1,则退出循环。

否则,如果是偶数就令n为n/2;如果是奇数就令n为``(3 * n + 1)/2。并令计数器 step++。

循环结束时就是所需要的答案。


参考代码


#include<cstdio>
int main(){
  int n, step = 0;
  scanf("%d",&n);
  while(n != 1){
  if(n %2 == 1) n = (3 * n + 1) / 2;
  else n = n/2;
  step++;
  }
  printf("%d\n",step);
  return 0;
}


【PAT B1032】 挖掘机技术哪家强


题目描述


为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。


输入格式:


输入在第 1 行给出不超过 10 5 的正整数 N,即参赛人数。随后 N 行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从 1 开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。


输出格式:


在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。

样例输入


6

3 65

2 80

1 100

2 70

3 40

3 0

样例输出


2 150


解题思路


令数组school[maxn]记录每个学校的总分,初始值为0。对每个读入的学校schID与其对应的分数score,令school[schID]+=score。

令变量k记录最高总分的学校编号,变量MAX记录最高分,初始值为-1,由于学校的编号是连续的,所以枚举编号1~N-1,不断更新k和MAX就好。

参考代码


#include<cstdio>
const int maxn = 100010;
int school[maxn] = {0};
int main(){
  int n, schID, score;
  scanf("%d", &n);
  for(int i = 0;i < n;i++){
  scanf("%d %d", &schID, &score);
  school[schID] += score;
  }
  int MAX = -1, k = 0;
  for(int i = 1;i <= n;i++){
  if(school[i] > MAX){
    MAX = school[i];
    k = i;
  }
  }
  printf("%d %d\n", k, MAX);
  return 0;
}

🎧1.2 查找元素

有时会需要这样一种情况:

给定一些元素,然后查找某个满足某条件的元素,这是查找操作需要做的事情。查找是学习写代码的一种基本功,是肯定需要掌握的。

一般来说,如果需要在一个比较小范围数据集里进行查找,那么直接遍历每一个元素就好了。如果需要查找的范围很大,就需要使用二分(4.5节)。看一个简单的例子:


问题 B: 找x


题目描述


输入一个数n(1<=n<=200),然后输入n个数值各不相同,再输入一个值x,输出这个值在这个数组中的下标(从0开始,若不在数组中则输出-1)。


输入格式:


测试数据有多组,输入n(1<=n<=200),接着输入n个数,然后输入x。

输出格式:


对于每组输入,请输出结果。


样例输入


4

1 2 3 4

3


样例输出


2


解题思路


可以使用一个长度为n的数组保存所有元素,然后从0到n-1寻找元素,如果找到就输出对应的小标,找不到就输出-1。


参考代码


#include<cstdio>
const int maxn = 210;
int a[maxn];
int main(){
  int n, x;
    while(scanf("%d", &n) != EOF){
        for(int i = 0;i < n;i++)
            scanf("%d",&a[i]);
        scanf("%d",&x);
        int k;
        for(k = 0;k < n;k++){
            if(a[k] == x){
                break;
            }
        }
        if(k != n)  printf("%d\n",k);
        else printf("-1\n");
    }
  return 0;
}


相关文章
|
7月前
|
机器学习/深度学习 算法 机器人
强化学习:时间差分(TD)(SARSA算法和Q-Learning算法)(看不懂算我输专栏)——手把手教你入门强化学习(六)
本文介绍了时间差分法(TD)中的两种经典算法:SARSA和Q-Learning。二者均为无模型强化学习方法,通过与环境交互估算动作价值函数。SARSA是On-Policy算法,采用ε-greedy策略进行动作选择和评估;而Q-Learning为Off-Policy算法,评估时选取下一状态中估值最大的动作。相比动态规划和蒙特卡洛方法,TD算法结合了自举更新与样本更新的优势,实现边行动边学习。文章通过生动的例子解释了两者的差异,并提供了伪代码帮助理解。
434 2
|
12月前
|
算法 索引
❤️算法笔记❤️-(每日一刷-141、环形链表)
❤️算法笔记❤️-(每日一刷-141、环形链表)
126 0
|
12月前
|
算法
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
131 0
|
12月前
|
算法 API 计算机视觉
人脸识别笔记(一):通过yuface调包(参数量54K更快更小更准的算法) 来实现人脸识别
本文介绍了YuNet系列人脸检测算法的优化和使用,包括YuNet-s和YuNet-n,以及通过yuface库和onnx在不同场景下实现人脸检测的方法。
462 1
|
12月前
|
算法
❤️算法笔记❤️-(每日一刷-160、相交链表)
❤️算法笔记❤️-(每日一刷-160、相交链表)
90 1
|
12月前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
264 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
11月前
|
机器学习/深度学习 算法 Python
机器学习入门:理解并实现K-近邻算法
机器学习入门:理解并实现K-近邻算法
151 0
|
12月前
|
存储 算法
动态规划算法学习一:DP的重要知识点、矩阵连乘算法
这篇文章是关于动态规划算法中矩阵连乘问题的详解,包括问题描述、最优子结构、重叠子问题、递归方法、备忘录方法和动态规划算法设计的步骤。
747 0
|
12月前
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
158 0
|
12月前
|
算法
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
❤️算法笔记❤️-(每日一刷-83、删除排序链表中的重复项)
124 0

热门文章

最新文章