题解
2026-09-11 21:34:46
发布于:广东
9阅读
0回复
0点赞
由题,我们需要读入一个二维数组,并逆序输出。读入部分:
for(int i =1;i<=n;i++){
for(int j=1;j<=m;j++){
std::cin>>a[i][j];
}
}
对于逆序输出:首先需要找到正序。请注意这里的(x,y),(c,d)恰与坐标相反——这里是(行,列)的形式。那么行数应为(c-x),这里注意数据保证c>d,故无需进行进一步判断。列数同理。
请注意在逆序输出时,c和x需要交换位置,并改变不等号顺序,同时"++"要变成"--"。如下:
for(int u = 1;u<=q;u++){
std::cin>>x>>y>>c>>d;
for(int i2=c;i2>=x;i2--){
for(int j2=d;j2>=y;j2--){
std::cout<<a[i2][j2]<<" ";
}
std::cout<<"\n";
}
}
std::ios::sync_with_stdio(false);
是可选项,只要不混用cin,cout;scanf,printf即可。这一行可以大幅加快I/O速度。原理不赘述。
vector是可选项。需要注意,在标准C++中,用形如a[n][m]的命令来声明数组时n和m必须是已经给定的常数而非变量。使用vector可以减小内存消耗。
#include<iostream>
#include<vector>
int main(){
std::ios::sync_with_stdio(false);
int n ,m,q,x,y,c,d;
std::cin>>n>>m;
std::vector<std::vector<int>>a(n****td::vector<int>(m+1));
for(int i =1;i<=n;i++){
for(int j=1;j<=m;j++){
std::cin>>a[i][j];
}
}
std::cin>>q;
for(int u = 1;u<=q;u++){
std::cin>>x>>y>>c>>d;
for(int i2=c;i2>=x;i2--){
for(int j2=d;j2>=y;j2--){
std::cout<<a[i2][j2]<<" ";
}
std::cout<<"\n";
}
}
}
这里空空如也
有帮助,赞一个