2.过河卒
题目:棋盘上 A 点有一个过河卒,需要走到目标 B 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示,A 点 (0,0),B 点 (n,m),同样马的位置坐标是需要给出的。现在要求你计算出卒从 A 点能够到达 B 点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。输入格式一行四个正整数,分别表示 B 点坐标和马的坐标。输出格式一个整数,表示所有的路径条数。
dp思路设当前点为(i,j)最优子结构:(i-1,j) (i,j-1)两种路径可以到达状态转移方程:(i,j) = (i-1,j)或(i,j-1)边界 :B 点 (n,m),以及特殊情况马的范围
//01
include using namespace std;/1.标记马的范围2.遍历点
/bool vis[25][25];long long dp[25][25];int main(){ int n,m,x,y; cin>>n>>m>>x>& ...
2.小鱼的数字游戏
题目:输入格式一行内输入一串整数,以 0 结束,以空格间隔。输出格式一行内倒着输出这一串整数,以空格间隔。代码://18
include using namespace std;int main(){ int a[101]; int i = 0; do{ cin>>a[i]; i++; }while(a[i - 1] != 0);
//倒着输出
for(int j = i - 2; j >= 0; j--){
cout<<a[j]<<" ";
}
}知识点:do{…}while() 翻译 = 做某件事,当满足括号里的条件时
1.数楼梯
题目:楼梯有 N 阶,上楼可以一步上一阶,也可以一步上二阶。编一个程序,计算共有多少种不同的走法。输入格式 一个数字,楼梯数。输出格式 输出走的方式总数。输入输出样例4 5
代码://36
include using namespace std;
int main(){ //输入楼梯数量 int n; scanf(“%d”,&n);
//特殊情况
if(n == 1 || n == 2 ||n == 0){
cout<<n;
return 0;
}
//计算方法数量 高精度加法 存储在string 转为int[] 相加到int[]去前导零 dp1变为dp1,之和变为dp1
string dp0 = "1";
string dp1 = "2";
for(int i = 2; i < n; i++){
int a[5005] = {0},b[5005] = {0};
int temp[50 ...
1.小鱼比可爱
题目:人比人,气死人;鱼比鱼,难死鱼。小鱼最近参加了一个“比可爱”比赛,比的是每只鱼的可爱程度。参赛的鱼被从左到右排成一排,头都朝向左边,然后每只鱼会得到一个整数数值,表示这只鱼的可爱程度,很显然整数越大,表示这只鱼越可爱,而且任意两只鱼的可爱程度可能一样。由于所有的鱼头都朝向左边,所以每只鱼只能看见在它左边的鱼的可爱程度,它们心里都在计算,在自己的眼力范围内有多少只鱼不如自己可爱呢。请你帮这些可爱但是鱼脑不够用的小鱼们计算一下。输入格式:第一行输入一个正整数n,表示鱼的数目。
第二行内输入 n个正整数,用空格间隔,依次表示从左到右每只小鱼的可爱程度
输入输出样例6 输出 0 0 0 3 1 24 3 0 5 1 2
代码:
include int main(){ int n; scanf(“%d”,&n); int nums[n]; int result[n]; for(int i = 0; i < n; i++){ scanf(“%d”,&nums[i]); ...
15.垂直柱状图
题目:题目:
include using namespace std;/44/int amount(int nums[],string s){ /for(long i = 0; i < s.size();i++){ //这种方式会报错 nums[s[i] - ‘A’]++; }/
for(long i=0;i<s.length();i++){ //这种不会
for(int j=0;j<26;j++){
if(s[i]-65==j){
nums[j]++;
}
}
}
return *nums; //!注意返回数组时在数组名前面加*
}int main(){ //读入四行字符串 string s1,s2,s3,s4; getline(cin,s1); getline(cin,s2); getline(cin,s3); getline(cin,s4);
//统计字母数量
int n ...
6.红和蓝
题目:代码:
14.语句解析
题目:代码:c++
include using namespace std;/*
*/int main(){ string s; getline(cin,s); mapq; q[‘a’] = ‘0’; q[‘b’] = ‘0’; q[‘c’] = ‘0’; for(int i = 0; i
13.你的飞碟在这儿 Your Ride Is Here
题目:text代码:c++
include using namespace std;
int data(string s){ int num = 1; for(int i = 0; i < s.size(); i++){ num = num * (s[i] - ‘A’ + 1); } return num;}
int main(){ string s1; string s2; cin>>s1>>s2;
int num1 = data(s1);//彗星
int num2 = data(s2);//小组
if(num2 % 47 == num1 %47){
cout<<"GO";
}
else cout<<"STAY";
return 0;
}
c
include include int data(char s[]){ int num = 1; for(int i = 0; s[i] != ‘\ ...
03-埃拉托斯特尼筛法
埃拉托斯特尼筛法(Sieve of Eratosthenes):1.目的:用于找出一定范围内所有质数的算法2.基本思想:从小到大逐个筛选数,将合数(非质数)标记掉,最终剩下的即为质数。3.详细解释:
1>初始化:创建一个长度为n+1的布尔数组(通常称为isPrime或prime),初始值全部设置为true,表示所有数都是质数。筛选过程:
2>从2开始,将第一个质数2标记为质数(true),然后将2的所有倍数标记为非质数(false)。然后找到下一个未被标记的数,即下一个质数3,将其标记为质数,然后将3的所有倍数标记为非质数。依次类推,直到遍历完所有小于等于n的数。
3>筛选规则:对于每个质数p,将其所有大于等于p^2且小于等于n的倍数标记为非质数。这是因为:1.如果一个数 x 是质数 p 的倍数,并且 x < p p,那么 x 可以表示为 x = p k,其中 k 是一个小于 p 的数。2.在之前处理质数 k 时,已经标记过 k 的所有倍数,包括 p k。3.因此,p k 已经在处理 k 时被标记为非质数,而且 k < p,所以 p k < ...
03-DFS算法
引入:递归代码模板:1.先写出口2.再写普通相同情况eg: 斐波那契数列 1 2 5 8 13…int fibo(int a){ if(a == 0 || a == 1){ //先写出口 return 1; } else{ return fibo(a - 1) + fibo( a - 2); }}思考是否具有递归特性:1>思考普遍情况1.当为极端情况时(自下而上 最”下”的情况)的情况 eg:跳台阶,只有一个台阶2.当为极端条件 + 1 时的情况 eg:跳台阶,有两个台阶
…2>推及到n时,(n - 1)对n的情况,是否只要知道了(n - 1),或(n - 2)等等以此类推 就能根据普遍情况得到n
换言之,即 想要得到n的结果,是否需要得到(n - 1/2/3/..)的结果
DFS—深度优先算法大概思路:不撞南墙不回头 依次走完所有路eg:
kotori和素因子(A组,B组)void dfs(int d,int sum){//重点 if(d == n){//先写退出条件—深度达到最大值 ans = min(ans, ...