课后作业-2025-09-21
题目:B4125 [语言月赛 202501] 知识竞赛
网址:https://www.luogu.com.cn/problem/B4125
思路:我们先把输入保存到二维数组a,然后我们得到总和最大的列,接着找到该列最大的值和最大值的个数。
知识点:二维数组,简单思维。
代码:
#include<bits/stdc++.h>
using namespace std;int a[55][55];
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]; } } int id,mx=0;for(int j=1;j<=m;j++){int s=0;for(int i=1;i<=n;i++){s+=a[i][j];}if(s>=mx){mx=s;id=j;}}mx=0;int cnt=0;for(int i=1;i<=n;i++){if(a[i][id]>mx){mx=a[i][id];cnt=1;}else if(mx==a[i][id]){cnt++;}}cout<<mx<<" "<<cnt;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/19305/1050
思路:我们从1到n枚举,先通过to_string函数获得整数i的字符串s,接着获得s的反转字符串t,然后判断s是否和t相等。
知识点:字符串,字符串反转,to_string函数。
代码:
#include<bits/stdc++.h>
using namespace std;int main(){int n;cin>>n;for(int i=1;i<=n;i++){string s=to_string(i);string t=s;reverse(t.begin(),t.end());if(s==t)cout<<i<<'\n';}return 0;
}
题目:BFS
网址:https://ac.nowcoder.com/acm/contest/19306/1036
思路:我们遍历一遍字符串,看是否存在"Bob"(忽略大小写)。
知识点:字符串,length()函数来获得字符串的长度,遍历字符串。
代码:
#include<bits/stdc++.h>
using namespace std;int main(){string s;int id=-1;cin>>s;int len=s.length();for(int i=0;i+2<len;i++){if((s[i]=='B'||s[i]=='b')&&(s[i+1]=='o'||s[i+1]=='O')&&(s[i+2]=='B'||s[i+2]=='b')){id=i;break;}}cout<<id;return 0;
}
题目:P11445 「ALFR Round 3」A 调皮的学生
网址:https://www.luogu.com.cn/problem/P11445
思路:我们定义一个cnt数组,cnt[i]代表第i位同学给老师评了多少次分数。按照题目的意思,如果cnt[i]不等于1,那么i这位同学就是调皮的同学。
知识点:桶方法
代码:
#include<bits/stdc++.h>
using namespace std;int cnt[110];
int main(){int n;cin>>n;int a=0;cin>>a;for(int i=1;i<=a;i++){int x;cin>>x;cnt[x]++;}int b=0;cin>>b;for(int i=1;i<=b;i++){int x;cin>>x;cnt[x]++;}int c=0;cin>>c;for(int i=1;i<=c;i++){int x;cin>>x;cnt[x]++;}int ans=0;for(int i=1;i<=n;i++){if(cnt[i]!=1)ans++;}cout<<ans;return 0;
}
题目:B4248 [语言月赛 202503] 数字棋盘
网址:https://www.luogu.com.cn/problem/B4248
思路:我们按照题目的意思模拟一下就行。
知识点:二维数组。
代码:
#include<bits/stdc++.h>
using namespace std;int dx[]={1,-1,0,0};
int dy[]={0,0,1,-1};
int a[1100][1100];
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];}}int x,y;cin>>x>>y;int ans=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(a[i][j]==x){int ok=0;for(int k=0;k<=3;k++){int xx=i+dx[k],yy=j+dy[k];if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&a[xx][yy]==y){ok=1; } } ans+=ok;} }}cout<<ans;return 0;
}
题目:B3724 [语言月赛202303] Carrot Harvest G
网址:https://www.luogu.com.cn/problem/B3724
思路:我们枚举矩形的左上角的顶点(i,j)和右下角的顶点的位置(k,p),然后我们统计一下这个矩形里面萝卜的个数,同时呢这个矩形的面积为(k-i+1)*(p-j+1)
知识点:二维数组。
代码:
#include<bits/stdc++.h>
using namespace std;int a[23][23];
int main(){int n,m,tim;cin>>n>>m>>tim;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];}}int mn=1000000;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){for(int k=i;k<=n;k++){for(int p=j;p<=m;p++){int cnt=0;for(int L=i;L<=k;L++){for(int R=j;R<=p;R++){cnt+=a[L][R];}}if(cnt>=tim){mn=min(mn,(k-i+1)*(p-j+1));}}}}}cout<<mn;return 0;
}
题目:数位之和
网址:https://ac.nowcoder.com/acm/contest/19305/1051
思路:我们先对输入取一个绝对值,然后再通过while循环和整除取余的方式来获取数位之和。
知识点:while循环,整数取余
代码:
#include<bits/stdc++.h>
using namespace std;int main(){int n;cin>>n;if(n<0)n=-n;int ans=0;while(n){int t=n%10;ans+=t;n/=10;}cout<<ans;return 0;
}
题目:[NOIP2017]成绩
网址:https://ac.nowcoder.com/acm/contest/18839/1034
思路:按照题目的意思进行整数加法就行。
知识点:整数加法。
代码:
#include<bits/stdc++.h>
using namespace std;int main(){int a,b,c;cin>>a>>b>>c;int ans=0.2*a+0.3*b+0.5*c;cout<<ans;return 0;
}
题目:P1152 欢乐的跳
网址:https://www.luogu.com.cn/problem/P1152
思路:我们先获取相邻元素之间的差值,然后用vis数组来记录一下出现的次数。当1到(n-1)都出现一次的时候,那么就是"欢乐的跳"。
知识点:一维数组,桶标记法。
代码:
#include<bits/stdc++.h>
using namespace std;int a[1100],vis[1100];
int main(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}for(int i=2;i<=n;i++){int x=abs(a[i]-a[i-1]);if(x>=1&&x<=n-1)vis[x]++;}for(int i=1;i<=n-1;i++){if(vis[i]!=1){cout<<"Not jolly";return 0;}}cout<<"Jolly";return 0;
}