🌈个人主页: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;
}//枚举暴力解法