寻寻觅觅
这个题意是在一串字符串中找出ACM的个数
两种解法
一是,看数据范围暴力即可
#include <iostream>
using namespace std;
int main()
{
string s;
cin>>s;
int len=s.size();
int ans=0;
for(int i=0;i<len;i++) //找第一个A的位置
{
for(int j=i+1;j<len;j++) //找第二个C的位置
{
for(int k=j+1;k<len;k++) //找第三个M的位置
{
if(s[i]=='A'&&s[j]=='C'&&s[k]=='M') ans++;
}
}
}
cout<<ans<<endl;
return 0;
}
第二种是 最简单的状态机
学的快的可以看看
时间复杂度较低
#include <iostream>
using namespace std;
int dp[1000][3]; //0是此时A的状态 1是此时AC的状态 2是此时ACM的状态
int main()
{
string s;
cin>>s;
s=" "+s;
int n=s.size();
for(int i=1;i<=n;i++)
{
if(s[i]=='A') dp[i][0]=dp[i-1][0]+1; //遇到A 此时A的数量+1
else dp[i][0]=dp[i-1][0];
if(s[i]=='C') dp[i][1]=dp[i-1][1]+dp[i-1][0]; //遇到C 此时AC的数量+1
else dp[i][1]=dp[i-1][1];
if(s[i]=='M') dp[i][2]=dp[i-1][2]+dp[i-1][1];//遇到M 此时ACM的数量+1
else dp[i][2]=dp[i-1][2];
}
cout<<dp[n][2]<<endl;
return 0;
}
数字串
这个题是求字符串的第n位数
数据范围是1000
暴力预处理字符串 然后用下标直接查询字符串的第n位
#include <iostream>
using namespace std;
int main()
{
string s;
for(int i=1;i<=500;i++)
{
s+=to_string(i);
}
s=" "+s;
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
cout<<s[n]<<endl;
}
}
走楼梯
最基础的斐波那契数列
递归打表
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long a[10001]={1,1};
int i=2;
while(i<=40)
{
a[i]=a[i-1]+a[i-2];
i++;
}
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
cout<<a[n]<<endl;
}
return 0;
}
做出你的判断
求一个数是不是质数
质数是因子只有1和本身的数
所以只要判断每个数有没有其他因子即可
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
int flag=0;
for(int i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
flag=1;
}
}
if(flag==0)
{
cout<<"yes"<<endl;
}
else
{
cout<<"no"<<endl;
}
}
}
A + B Problem
输出a+b即可
#include <iostream>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
cout<<a+b<<endl;
}