课后作业-2025-09-14
题目:B3792 [NICA #1] 年龄问题
网址:https://www.luogu.com.cn/problem/B3792
思路:小A的年龄等于爸爸的年龄减去b,奶奶的年龄等于爸爸的年龄加上c。
知识点:加减法运算符
代码:
#include<bits/stdc++.h>
using namespace std;int main(){int a,b,c;cin>>a>>b>>c;cout<<(a-b)<<" "<<(a+c); return 0;
}
题目:B3893 [NICA #3] 一键三连
网址:https://www.luogu.com.cn/problem/B3893
思路:答案等于搬运的视频个数+2*原创的视频个数。
知识点:简单加减法。
代码:
#include<bits/stdc++.h>
using namespace std;int main(){int x,y;cin>>x>>y;int ans=x+2*y;cout<<ans;return 0;
}
题目:B2040 判断是否为两位数
网址:https://www.luogu.com.cn/problem/B2040
思路:直接判断是否小于等于99&&大于等于10
知识点:简单的if判断语句。
代码:
#include<bits/stdc++.h>
using namespace std;int main(){int x;cin>>x;if(x>=10&&x<=99)cout<<1;else cout<<0;return 0;
}
题目:P5724 【深基4.习5】求极差 / 最大跨度值 / 最大值和最小值的差
网址:https://www.luogu.com.cn/problem/P5724
思路:我们写一个for循环来输入n个数,用mx来保存输入的最大值,mn来保存输入的最小值。
知识点:for循环,max和min函数。
代码:
#include<bits/stdc++.h>
using namespace std;int main(){int n;cin>>n;int mn=1100,mx=-1;for(int i=1;i<=n;i++){int x;cin>>x;mn=min(mn,x);mx=max(mx,x);}int ans=mx-mn;cout<<ans;return 0;
}
题目:B2106 矩阵转置
网址:https://www.luogu.com.cn/problem/B2106
思路:输出的时候先输出第一列,再输出第二列,再输出第三列,后面依次,直到输出第m列。
知识点:二维数组
代码:
#include<bits/stdc++.h>
using namespace std;int a[110][110];
int main(){int n,m;cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];}}for(int j=1;j<=m;j++){for(int i=1;i<=n;i++)cout<<a[i][j]<<" ";cout<<'\n';}return 0;
}
题目:B2104 矩阵加法
网址:https://www.luogu.com.cn/problem/B2104
思路:我们先输入数据到a和b这两个二维数组,然后再输出每个位置元素相加的结果。
知识点:二维数组
代码:
#include<bits/stdc++.h>
using namespace std;int a[110][110],b[110][110];
int main(){int n,m;cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++)cin>>a[i][j];}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++)cin>>b[i][j];}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cout<<a[i][j]+b[i][j]<<" ";}cout<<'\n';}return 0;
}
题目:上三角矩阵判定
网址:https://ac.nowcoder.com/acm/contest/19306/1018
思路:我们知道,对于一个位置(i,j),如果i>j,则这个位置就在主对角线以下。
知识点:二维数组。
代码:
#include<bits/stdc++.h>
using namespace std;int a[11][11];
int main(){int n;cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cin>>a[i][j];}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(i>j){if(a[i][j]!=0){cout<<"NO";return 0;}}}}cout<<"YES";return 0;
}
题目:B3711 [语言月赛202302] 惊蛰
网址:https://www.luogu.com.cn/problem/B3711
思路:我们先判断不删除的情况下是不是4的倍数,接着我们使用两重for循环来枚举删除的位置。
知识点:字符串,函数调用,两重for循环。
代码:
#include<bits/stdc++.h>
using namespace std;int cal(string s,int l,int r)
{int len=s.length();int res=0;for(int i=0;i<len;i++){if(i>=len-r&&i<=len-l)continue;res=res*10+(s[i]-'0');res%=4;}return res;
}
void solve()
{string s;cin>>s;int len=s.length();int res=0;for(int i=0;i<len;i++){res=res*10+(s[i]-'0');res=res%4;}if(res==0){cout<<"Yes"<<'\n';return;}for(int l=1;l<=len;l++){for(int r=l;r<=len;r++){if(l==1&&r==len)continue;int t=cal(s,l,r);if(t==0){cout<<"Yes"<<'\n';return;}}}cout<<"No"<<'\n';
}
int main(){int T;cin>>T;while(T--){solve();}return 0;
}
题目:B2102 计算鞍点
网址:https://www.luogu.com.cn/problem/B2102
思路:mx[i]代表a数组第i行的最大值,mn[i]代表第i列的最小值。我们先通过for循环来计算出每一行的最大值并保存到mx数组,每一列的最小值并保存到mn数组。接着我们通过双重for循环来判断a[i][j]==mx[i]&&a[i][j]==mn[j]。
知识点:二维数组。
代码:
#include<bits/stdc++.h>
using namespace std;int a[10][10];
int mx[10],mn[10];
int main(){for(int i=1;i<=5;i++){for(int j=1;j<=5;j++){cin>>a[i][j];}}for(int i=1;i<=5;i++){for(int j=1;j<=5;j++){mx[i]=max(mx[i],a[i][j]);}}for(int j=1;j<=5;j++){mn[j]=1e9;for(int i=1;i<=5;i++){mn[j]=min(mn[j],a[i][j]);}}for(int i=1;i<=5;i++){for(int j=1;j<=5;j++){if(a[i][j]==mx[i]&&a[i][j]==mn[j]){cout<<i<<" "<<j<<" "<<a[i][j];return 0;}}}cout<<"not found";return 0;
}
题目:随机序列
网址:https://ac.nowcoder.com/acm/contest/19306/1001
思路:
对于极差:我们求出最大值-最小值就行。
对于方差:我们先求出平均值,再根据公式求出方差。最后输出的时候注意一下输出格式。
知识点:double浮点数的运用,cout输出尾数固定的浮点数。
代码:
#include<bits/stdc++.h>
using namespace std;int a[100009];
void solve()
{int n;cin>>n;int mx=-1e9-10,mn=1e9+10;for(int i=1;i<=n;i++){cin>>a[i]; }double sum=0;for(int i=1;i<=n;i++){mx=max(mx,a[i]);mn=min(mn,a[i]);sum+=a[i];}double aver=(double)sum/(double)n;double fz=0;for(int i=1;i<=n;i++){fz+=(a[i]-aver)*(a[i]-aver);}fz=fz/(double)n;cout<<(mx-mn)<<" ";cout<<fixed<<setprecision(3)<<fz<<'\n';}
int main(){int T;cin>>T;while(T--)solve();return 0;
}
题目:有序序列插入一个整数
网址:https://ac.nowcoder.com/acm/contest/19306/1012
思路:我们先找到第一个大于x的a[i],然后输出a[j](其中,j<i),然后再输出x,接着输出a[j](j>=i&&j<=n)。如果没有找到,就代表x非常大,我们只需要先输出a数组,最后输出x就行。
知识点:单调性。
代码:
#include<bits/stdc++.h>
using namespace std;int a[100];
int main(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i]; }int x;cin>>x;for(int i=1;i<=n;i++){if(a[i]>x){for(int j=1;j<i;j++){cout<<a[j]<<" "; }cout<<x<<" ";for(int j=i;j<=n;j++)cout<<a[j]<<" ";return 0;}}for(int i=1;i<=n;i++)cout<<a[i]<<" ";cout<<x;return 0;
}
题目:wyh的矩阵
网址:https://ac.nowcoder.com/acm/contest/19306/1022
思路:按照题目模拟就行。
知识点:简单模拟。
代码:
#include<bits/stdc++.h>
using namespace std;void solve()
{int n;cin>>n;long long sum=0;for(int i=1;i<=n;i++){int dis=abs(i-(n/2+1));for(int j=1+dis;j<=n-dis;j++){long long id=(i-1)*n+j;sum+=id;}}cout<<sum<<'\n';}
int main(){int T;cin>>T;while(T--){solve();}return 0;
}