日常自律
1、分治算法
https://leetcode.cn/circle/article/zeM9YK/
k神的文章图片结合文字讲解,逻辑清晰易懂!
2、奇数阶矩阵
https://blog.csdn.net/m0_46078030/article/details/103881708
看了很多文章,还是这个比较欧克,感谢博主!
事情起源于帮大一的学弟解决问题,没想到最后一题翻了车,最后是用的全排列列出来的结果;
我记得还有人用了九个for解决的,So beautiful!但是忘记在哪里看的了,找蛮久找不到当时的笔记,也许是洛谷还是什么,忘了,放弃了!感觉自己好菜啊,啊啊啊!不行,我要变强!
#include<bits/stdc++.h>
/*
从1到9的连续9个整数,排成3*3矩阵阵列,要求每行三个数的和与每列三个数的和相等
且与两条对角线上三个数的和相等。请编写程序输出这个数组,要求用穷举法。
*/
using namespace std;
int main(){
int a[3][3];
int s[9]={1,2,3,4,5,6,7,8,9};
int s1=0,s2=0,s3=0,s4=0,s5=0,s6=0,s7=0,s8=0;
do{
a[0][0]=s[0]; a[0][1]=s[1]; a[0][2]=s[2];
a[1][0]=s[3]; a[1][1]=s[4]; a[1][2]=s[5];
a[2][0]=s[6]; a[2][1]=s[7]; a[2][2]=s[8];
s1=(a[0][0]+a[0][1]+a[0][2]);
s2=(a[1][0]+a[1][1]+a[1][2]);
s3=(a[2][0]+a[2][1]+a[2][2]);//横三行
s4=(a[0][0]+a[1][0]+a[2][0]);
s5=(a[0][1]+a[1][1]+a[2][1]);
s6=(a[0][2]+a[1][2]+a[2][2]);//竖三行
s7=(a[0][0]+a[1][1]+a[2][2]);//左斜线
s8=(a[0][2]+a[1][1]+a[2][0]);//右斜线
if(s1==s2&&s1==s3&&s1==s4&&s1==s5&&s1==s6&&s1==s7&&s1==s8) {
for(int i=0;i<3;i++){
for(int j=0;j<3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
printf("\n");
}
}while(next_permutation(s,s+9));
return 0;
}
3、两个语法知识
全排列函数next_permutation
https://www.cnblogs.com/aiguona/p/7304945.html
懊恼,老是记不住函数全名,dev也不像idea那样能提醒,啊啊啊,我要记死你!!
二维数组初始化
https://blog.csdn.net/qq_35987777/article/details/105905452
一行代码搞定,巴适!
vector<vector<int>> matrix(M,vector<int>(N));