🌈个人主页:Rookie Maker
🔥 系列专栏:算法
🏆🏆关注博主,随时获取更多关于IT的优质内容!🏆🏆
😀欢迎来到小田代码世界~
😁 喜欢的小伙伴记得一键三连哦 ૮(˶ᵔ ᵕ ᵔ˶)ა
文章目录
-
前言
一、模拟算法
1.模拟
2.例题:
二.暴力法
遍历
枚举
前言
在这里,或许你会有不一样的收获,不要一提算法就闻风丧胆,面对困难的最好的方法就是克服
一、模拟算法
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;
}//枚举暴力解法