8.17集训笔记
上午二维数组/函数
- B2101 计算矩阵边缘元素之和
分析:尽量对每个元素只遍历一次,如果发现是边缘元素,那么加入即可。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int n,m,a[N][N];
int main(){
cin>>n>>m;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++) cin>>a[i][j];
int ans=0;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++) {
if(i==1 || j==1 || i==n || j==m)
ans += a[i][j];
}
cout<<ans;
return 0;
}
- P1216 [USACO1.5] [IOI1994]数字三角形 Number Triangles
分析:方法1:从上到下,最后一行的最大值就是答案;
方法2:从下到上,第一个就是答案;
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=1010;
int n,m,a[N][N];
int main(){
cin>>n;
for(int i=1; i<=n; i++)
for(int j=1; j<=i; j++) cin>>a[i][j];
// 从上到下
// for(int i=1; i<=n; i++)
// for(int j=1; j<=i; j++)
// a[i][j] += max(a[i-1][j], a[i-1][j-1]);
// int ans=0;
// for(int j=1; j<=n; j++) ans=max(ans, a[n][j]);
// cout<<ans;
// 从下到上
for(int i=n-1; i>=1; i--){
for(int j=1; j<=i; j++){
a[i][j] += max(a[i+1][j], a[i+1][j+1]);
}
}
cout<<a[1][1];
return 0;
}
- P1002 [NOIP2002 普及组] 过河卒
分析:根据数据找规律,使用偏移数组和标记数组,对马儿能到的位置进行标记,该位置的方案一定为0,至于规律一定要自己模拟一下,比如写出对于 4*4 的矩阵,每个点的方案数,然后找到规律:a[i][j] = a[i-1][j] + a[i][j-1];
点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int n,m,a[N][N];
int dx[9]={0,2,1,-1,-2,-2,-1, 1, 2};
int dy[9]={0,1,2, 2, 1,-1,-2,-2,-1};
bool st[N][N];
int main(){
int n,m,x,y;
cin>>n>>m>>x>>y;
a[1][0]=1;
for(int i=0; i<9; i++) {
int tx=x+dx[i], ty=y+dy[i];
st[tx][ty] = 1;
}
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++) cout<<st[i][j]<<" "; cout<<endl;
}cout<<endl;
for(int i=1; i<=n+1; i++){
for(int j=1; j<=m+1; j++){
a[i][j] = a[i-1][j] + a[i][j-1];
if(st[i-1][j-1]) a[i][j]=0;
}
}
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++) cout<<a[i][j]<<" "; cout<<endl;
}cout<<endl;
cout<<a[n+1][m+1];
return 0;
}
函数笔记: https://www.cnblogs.com/hellohebin/p/16100127.html
递归笔记: https://www.cnblogs.com/hellohebin/p/16101627.html
函数练习、递归入门
点击查看代码
#include<iostream>
#include<iomanip>
#include<cmath>
#define T double
using namespace std;
T dis(T x1,T y1,T x2,T y2){
return sqrt(pow(x1-x2,2)+pow(y1-y2,2));
}
int main(){
T x1,x2,x3,y1,y2,y3; cin>>x1>>y1>>x2>>y2>>x3>>y3;
T ans=dis(x1,y1,x2,y2)+dis(x1,y1,x3,y3)+dis(x2,y2,x3,y3);
cout<<fixed<<setprecision(2)<<ans<<endl;
return 0;
}
点击查看代码
#include<iostream>
using namespace std;
bool isleap(int num){
if(num%4==0 && num%100!=0 || num%400==0) return true;
return false;
}
int a[3000];
int main(){
int x=1582,y=3000,j=0; cin>>x>>y;
for(int i=x; i<=y; i++){
if(isleap(i)) a[++j]=i;
}
cout<<j<<endl;
for(int i=1; i<=j; i++) cout<<a[i]<<" ";
return 0;
}
点击查看代码
#include<iostream>
using namespace std;
bool isprim(int i) {
// 1. 判断 i 是不是素数, 枚举 i 的因子
for(int j=2; j<=i/j; j++)
if(i%j==0) return 0;
return n > 1;
}
int main() {
int l,s=0, p=0; cin>>l;
for(int i=2; i<=l; i++) {
// 2. i 是素数,且 袋子可以装下 i
if(isprim(i) && s+i <= l) {
s += i, p ++;
cout<<i<<endl;
}
}
cout<<p<<endl;
return 0;
}
点击查看代码
#include<iostream>
using namespace std;
bool isprim(int i) {
// 1. 判断 i 是不是素数, 枚举 i 的因子
bool flag=1;
for(int j=2; j<=i/j; j++) {
if(i%j==0) return 0;
}
return n>1;
}
bool huiwen(int n) {
int a=n,b=0;
while(a) {
b=b*10+a%10;
a/=10;
}
return b==n;
}
int main() {
int n,m;
cin>>n>>m;
if(m>9989899) m=9989899;
for(int i=n; i<=m; i++) {
// 2. i 是素数,且是回文数
if(huiwen(i) && isprim(i)) {
cout<<i<<endl;
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
2021-08-17 1.9 while循环