常用的算法--模拟和暴力

通过Ai的解释:
常用的算法--模拟和暴力_第1张图片

总结就是如下:
1.模拟算法
模拟算法又称为仿真算法,其核心是通过对问题实际过程的模拟,得到问题的解决方案。模拟算法的实现通常需要考虑多种情况和细节。
2.暴力算法
暴力算法又称为穷举算法,其核心是通过枚举所有可能的情况,找到问题的解决方案。暴力算法通常适用于问题规模较小、要求精确解的场景。暴力算法的实现通常比较简单,但是其时间复杂度通常较高,因此不适用于处理大规模的数据。

总之就是凭借题目的数据关系结合数学,自己分析一下
举几个例子

题目:P1420 最长连号
链接:https://www.luogu.com.cn/problem/P1420

题目描述
输入长度为 n 的一个正整数序列,要求输出序列中最长连号的长度。
连号指在序列中,从小到大的连续自然数。

输入格式
第一行,一个整数 n。
第二行,
n 个整数 a i ,之间用空格隔开。

输出格式
一个数,最长连号的个数。

题解:

#include
int main(){
    int n;
    scanf("%ld",&n);
     int i,arr[n];
    for(i=0;i<n;i++){
        scanf("%ld",&arr[i]);
    }
    int count=1,max=0;//连号必然饱含本身所以开始初始化为1
    for(i=1;i<n;i++){
        if((arr[i]-arr[i-1])==1)count++;
            else   count=1; 
        if(count>max)max=count;
        //重置
    }printf("%d",max);
    
}

题目:P6206 [USACO06OCT] Another Cow Number Game G
链接:https://www.luogu.com.cn/problem/P6206

题目描述
奶牛们在玩一种数字游戏,Bessie 想让你帮她预测一下结果。游戏开始时,Bessie 将得到一个正整数 N。此时她的分数为 0。
奶牛们按照以下规则对 N 进行变换:
如果 N 是奇数,那么将它乘以 3 后再加 1。
如果 N 是偶数,那么将它除以 2。
数字每变换一次,Bessie 就得到 1 分。当 N=1 时,游戏结束。此时的分数就是她的最终得分。

输入格式
一行,一个整数 N。

输出格式
一行,一个整数,为 Bessie 的最终得分。
常用的算法--模拟和暴力_第2张图片

#include
int main(){
    //int 的范围小  要long扩展
    long int n;
    int score=0;
    scanf("%ld",&n);
    while(n!=1){
        if(n%2==1){n=3*n+1;score++;}
        if (n%2==0){n=n/2;score++;}
    }printf("%d",score);
    
}

你可能感兴趣的:(算法,数据结构)