网站蜘蛛爬行统计,长沙公司网站制作,如何注册网站免费注册,建e网室内设计网背景墙#x1f308;个人主页#xff1a;Yui_ #x1f308;Linux专栏#xff1a;Linux #x1f308;C语言笔记专栏#xff1a;C语言笔记 #x1f308;数据结构专栏#xff1a;数据结构 #x1f308;C专栏#xff1a;C 文章目录 1.小红的好数1.1 题目描述1.2 思路1.3 代码 2.… 个人主页Yui_ Linux专栏Linux C语言笔记专栏C语言笔记 数据结构专栏数据结构 C专栏C 文章目录 1.小红的好数1.1 题目描述1.2 思路1.3 代码 2.小红的好数组2.1 题目描述2.2 思路2.3 代码 3.小红的矩阵行走3.1 题目描述3.2 思路1(动态规划)3.2 思路2(dfs暴搜)3.3 代码13.3 代码2 4.小红的行列式构造4.1 题目描述4.2 思路4.3 代码 比赛链接
比赛链接 1.小红的好数
1.1 题目描述
小红定义一个正整数是“好数”当且仅当该数满足以下两个性质
数位恰好为2。个位数和十位数相同。 请你判断一个给定的正整数是否是好数 1.2 思路
直接把数字当成字符串来判断
1.3 代码
#include iostream
#include string
using namespace std;int main()
{string s;cin s;if (s.size() 2 s[0] s[1]){cout Yes;}else{cout No;}return 0;
}2.小红的好数组
2.1 题目描述
小红定义一个数组是“好数组”当且仅当该数组满足以下两个性质
该数组不是回文数组。修改恰好一个元素后该数组变成回文数组。 所谓回文数组即将一个数组左右翻转后和原数组相同例如[12,3,12]是回文数组。 现在小红拿到了一个数组请你帮小红计算有多少个长度为kkk的连续子数组是好数组。
2.2 思路
因为数据量很小直接按题目来判断就可以了把判断回文数的思路给改一下就是了。
2.3 代码
#include iostream
#include string
#include vector
using namespace std;
bool check(vectorint v, int begin, int end)
{int error 2;while (begin end error ! 0) {if (v[begin] ! v[end]) {error - 1;}begin 1;end - 1;}return error 1;
}
int main()
{int n, k;cin n k;vectorint v(n);for (int i 0; i n; i) cin v[i];int ans 0;for (int i 0; i n - k; i){if (check(v, i, i k - 1)) {ans 1;}}cout ans endl;return 0;
}3.小红的矩阵行走
3.1 题目描述
小红因为太喜欢出“矩阵行走”的题被小紫关进矩阵里了她希望你来救救她 现在给定了一个矩阵小红初始站在矩阵的左上角。已知小红每次可以向右或者向下走一步当小红经过一个格子时她将收集该格子的正整数。小红希望到达右下角时收集到的所有正整数都相同。你能帮帮她吗
3.2 思路1(动态规划)
很经典的’‘走迷宫’题目不过这里的障碍物就变成了与数组第一个元素不同的元素的位置。了解完后我们先创建一个dp数组多开一行再多开一列这样可以有效的防止越界。dp[i][j]如果等于-1就代表可以按题目要求走到的位置。 那么我们需要先把d[0][0]初始化为-1。因为[0][0]是绝对可以走到的位置肯定要初始化为-1. 后续我们遍历数组当遍历的数组元素为目标元素vv[0][0]。判断这个位置是否可以从前一步走过了。因为小红只会向下走和向右走所以我们只需要判断当前位置的上一行或者上一列就可以了。 最后遍历完后判断一下dp[n][m]是否等于-1。
3.2 思路2(dfs暴搜)
需要创建与vv相同的数组来表示已经走过的路为了防止回溯时走回已经走过的路。再创建一个方向数组int dis[2][2] { {0,1},{1,0} };来表示接下来要走的方向。 开始从vv[0][0]进入dfs。递归的结束条件就是当递归到矩阵的最后一个元素如果能走到就表示可以走出矩阵。 后面的代码也是回溯的经典代码先用一个循环来表示接下来要走的方向在判断这个方向是否合法。
3.3 代码1
#include iostream
#include string
#include vector
#include cstdbool
using namespace std;int main()
{int t;cin t;while (t--){int n, m;cin n m;vectorvectorint vv(n, vectorint(m));for (int i 0; i n; i)for (int j 0; j m; j) cin vv[i][j];vectorvectorint dp(n1,vectorint(m1));int tmp vv[0][0];dp[1][1] -1;for(int i 1;in;i){for(int j 1;jm;j){if(vv[i-1][j-1] tmp(dp[i-1][j] -1||dp[i][j-1] -1)){dp[i][j] -1;}}}if(dp[n][m] 0){coutNoendl;}else{coutYesendl;}}return 0;
}3.3 代码2
#include iostream
#include string
#include vector
#include cstdbool
using namespace std;int dis[2][2] { {0,1},{1,0} };
void dfs(vectorvectorint vv, int a, int b, vectorvectorbool path,boolans) {int n vv.size(), m vv[0].size();if (a n - 1 b m - 1)ans true;for (int i 0; i 2; i) {int x a dis[i][0];int y b dis[i][1];if (x n || y m || vv[x][y] ! vv[a][b]||path[x][y]) continue;path[x][y] true;dfs(vv, x, y,path,ans);path[x][y] false;}
}
int main()
{int t;cin t;while (t--){int n, m;cin n m;vectorvectorint vv(n, vectorint(m));for (int i 0; i n; i)for (int j 0; j m; j) cin vv[i][j];vectorvectorbool path(n, vectorbool(m,false));bool ans false;path[0][0] true;dfs(vv, 0, 0,path,ans);if (ans) {cout Yes endl;}else {cout No endl;}}return 0;
}4.小红的行列式构造
4.1 题目描述
小红希望你构造一个3阶行列式满足每个元素的绝对值不小于1且行列式的值等于xxx。你能帮帮她吗
4.2 思路
纯数学在3阶行列式的计算公式。
因为答案存在很多个可以假设很多种情况。
4.3 代码
#include iostream
#include string
#include vector
#include cstdbool
using namespace std;int main()
{int x 0;cinx;if(x0){cout1 1 1endl;cout1 2 1endl;cout1 1 ;coutx1endl;}else{cout-1 -1 -1endl;cout-1 -2 -1endl;cout-1 -1 endl;coutx-1endl;}return 0;
}文章就先到这里了欢迎大家的点赞评论和关注~