作业介绍
本次主要对二维数组和题目进行了练习,练习题目以及答案如下,如果完成可以在:
- 首页->二维数组 中继续训练。
- 分析:每次先走列,后走行,使用计数器
cnt
,每次+1
. - 使用
setw(m)
控制宽度,需要头文件iomanip
,此类输出一般无需再使用空格。
#include<iostream>
#include<iomanip>
using namespace std;
const int N=100;
int n,m, cnt=0;
int a[N][N];
int main(){
cin>>n;
for(int j=1; j<=n; j++)
for(int i=1; i<=n; i++)
a[i][j] = ++cnt;
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
cout<<setw(3)<<a[i][j];
}
cout<<endl;
}
return 0;
}
- 分析:题目其实只是求最大值与最小值的差,可以不使用二维数组,直接输入 个元素即可;
- 求最大值maxx的时候需要保证其至少被更新一次,所以初始化为极小值,此题为
0
; - 求最小值 minx的时候同理,初始化为极大值。
#include<iostream>
using namespace std;
int main(){
int n,m,x, maxx=0, minx=1e9;
cin>>n>>m;
for(int i=1; i<=n*m; i++){
cin>>x;
if(maxx < x) maxx = x;
if(minx > x) minx = x;
}
cout<<maxx - minx;
return 0;
}
- 分析:求科目分数均值,那么使用
x[i]
记录当前输入的学科 i 的分数,s[i]
记录学科 i 的总分数,需要注意使用double
。
#include <iostream>
#include <iomanip>
using namespace std;
int n;
double x[4], s[4];
int main(){
cin>>n;
for(int i=1; i<=n; i++){
for(int j=1; j<=3; j++){
cin>>x[j];
s[j] += x[j];
}
}
for(int i=1; i<=3; i++)
cout<<fixed<<setprecision(1)<<s[i]/n<<" ";
return 0;
}
- 分析:判断(i,j) 是否是一个山峰的时候,需要看四周数据,所以需要使用二维数组存储
- 不考虑边缘数据,可以直接从[2,n-2]行, [2,m-1]列进行遍历,这样保证其一定有四个方向的元素。
int& t = a[i][j]
, 此次&
起到引用的作用,表示取别名,给a[i][j]
取一个名字t
,这样不会开辟空间,同时使得t
与a[i][j]
二者的操作是等效的;当然,如果此处不使用&
也是可以的。- 第三步:判断(i,j)四周的元素是否都比
t
小。
#include <iostream>
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];
for(int i=2; i<n; i++)
for(int j=2; j<m; j++) {
int& t = a[i][j];
if(t>a[i-1][j] && t>a[i][j-1] && t>a[i+1][j] && t> a[i][j+1]){
cout<<t<<endl;
}
}
return 0;
}
- 回文数是指:,那么称 是回文数。
while(t) b = b*10+t%10, t /= 10;
关键代码,可以带入数据t=123
,推导b,t
的变化过程以帮助理解。- b=0,t=123
- b=3, t=12
- b=32, t=1
- b=321, t=0
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int n,m,x;
int main() {
cin>>n>>m;
for(int i=1; i<=n*m; i++){
int a,b=0; cin>>a;
int t = a;
while(t) b = b*10+t%10, t /= 10;
if(a==b) cout<<a<<endl;
}
return 0;
}
- 分析:需要讨论9钟方案,比较麻烦,可以考虑什么状态下谁胜利
(a>b? "a win":"b win")
三目运算符号,此处用于对输出进行简写- 解释:
(a>b? 语句1: 语句2)
当a>b
成立,就执行语句1;否则执行语句2.
#include<bits/stdc++.h>
using namespace std;
const int N=110;
int n,m,a,b,x,y;
int main() {
cin>>n;
while(n--){
cin>>x>>y;
if(x==1&&y==2 || x==2&&y==3 || x==3&&y==1) a++;//A胜利的状态
if(x==1&&y==3 || x==2&&y==1 || x==3&&y==2) b++;//B胜利的状态
}
if(a==b) cout<<"tie";
else cout<<(a>b? "a win":"b win");
return 0;
}
- 状态
- 已结束
- 题目
- 7
- 开始时间
- 2024-5-18 0:00
- 截止时间
- 2024-5-26 23:59
- 可延期
- 24 小时