闻风丧胆的算法(二)

🌈个人主页:Rookie Maker
🔥 系列专栏:算法
🏆🏆关注博主,随时获取更多关于IT的优质内容!🏆🏆  

😀欢迎来到我的代码世界~
😁 喜欢的小伙伴记得一键三连哦 ૮(˶ᵔ ᵕ ᵔ˶)ა

前言

在这里,或许你会有不一样的收获,不要一提算法就闻风丧胆,面对困难的最好的方法就是克服

一、模拟算法

1.模拟

模拟,属于入门级算法,顾名思义,就是让电脑按照题目所给出的方法来运行,最终输出所需要的结果的过程。

 2.例题:

eg1:求两个数之和

#include<iostream>
using namespace std;
//给出两个整数a,b,求和
//一步步实现
int main()
{
	int a, b = 0;
	cin >> a >> b ;//两个整数
	cout << a + b << endl;//求和
}

 eg2:国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续 n天每天收到 n 枚金币后,骑士会在之后的连续 n+1天里,每天收到 n+1枚金币。

请计算在前 k 天里,骑士一共获得了多少金币。

#include<iostream>
using namespace std;
int main()
{
    int K, sum = 0, n = 0, i = 1;
    cin >> K;
    while (n != K) 
    {
        for (int j = 1; j <= i; j++)
        {
            sum += i;
            n++;
            if (n == K)
                break;
        }
        i++;
    }
    cout << sum << endl;
    return 0;
}
//动态跟踪次数
//当k=4时,k=4 n=0
//j=1 0!=4  sum=1 n=1  执行1次
//i=2 跳出循环 j=1 j=2 执行2次
//sum=1+2+2
//第四天和往后3天的金币一样多,怎么破局!if break 

eg3:冶炼金属 – 蓝桥云课 (lanqiao.cn)

#include<bits/stdc++.h>
using namespace std;
int main()
{
  int n;
  cin>>n;
  int mn=-1,mx=1e9;
  while(n--)
  {
    int a,b;
    cin>>a>>b;
    int l=a/(b+1)+1;
    int r=a/b;
    mn=max(mn,l);//
    mx=min(mx,r);
  }
cout<<mn<<" "<<mx<<endl;
return 0;
}//模拟:设置区间

 eg4:修剪灌木 – 蓝桥云课 (lanqiao.cn)

 

#include <iostream>
using namespace std;
int main()
{
  int n;
  cin>>n;

  for(int i = 1;i<=n;i++) cout<<max(i-1,n-i)*2<<endl;//先编译成功

  return 0;
}

 二.暴力法

暴力法(也称穷举法、枚举法或蛮力法)是指采用遍历(扫描)技术,即采用一定的策略将待求解问题的所有元素依次处理一次,从而找出问题的解。暴力法是基于计算机运算速度快这一特性,在解决问题时采取的一种“懒惰” 策略。这种策略不(或者说经过很少)思考,把问题所有情况或所有过程交给计算机去一一尝试,从中找出问题的解。

遍历

for循环

日期统计 – 蓝桥云课 (lanqiao.cn)

#include <iostream>
using namespace std;
int main()
{ 
  int a[100]={5,6,8,6,9,1,6,1,2,4,9,1,9,8,2,3,6,4,7,7,5,9,5,0,3,8,7,5,8,1,5,8,6,1,8,3,0,3,7,9,2,
  7,0,5,8,8,5,7,0,9,9,1,9,4,4,6,8,6,3,3,8,5,1,6,3,4,6,7,0,7,8,2,7,6,8,9,5,6,5,6,1,4,0,1,0,0,9,4,8,0,9,1,2,8,5,0,2,5,3,3};
  int month,day,num=0;
  for(month=1;month<=12;month++){
    if(month==2){
      day=28;
    }else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
      day=31;
    }else{
      day=30;
    }
    for(int dd=1;dd<=day;dd++){
      int j=0;
      int b[8]={2,0,2,3,month/10,month%10,dd/10,dd%10};
      for(int i=1;i<100;i++){
        if(a[i]==b[j]){
          j++;
        }
        if(j==8){
          num++;
          break;
        }
      }
    }
  }
  cout<<num;
  return 0;
}

枚举

枚举出来各种情况

 刷题统计 – 蓝桥云课 (lanqiao.cn)

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main()
{
  LL a,b,n;
  cin>>a>>b>>n;
  LL res=n/(5*a+2*b)*7;
  LL d[]={a,a,a,a,a,b,b};
  n=n%(5*a+2*b);
  for(int i=0;n>0;i++)
  {
    n-=d[i];
    res++;
  }
  cout<<res<<endl;
  return 0;
}//枚举暴力解法

🎁🎁🎁今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下,您的支持就是我前进的动力! 

版权声明:本文为博主作者:Rookie Maker原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/2301_79712692/article/details/137384704

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2024年4月16日
下一篇 2024年4月16日

相关推荐