202606 GESP 4级编程题题解
2026-07-04 19:58:05
发布于:浙江
灵感来自于Eucatastrophe的这个帖子。
一眼结构体,重要的是你的排序过程,需要更改下排序方法。
#include <iostream>
#include <algorithm>
using namespace syh;
struct node//结构体
{
double w;
double h;
int id;//记录序号
bool operator<(const node &b) const//将"<"符号重定义为下面的排序方法
{
return w/h/h > b.w/b.h/b.h;
}
}p[1005];
int main()
{
int n;
cin>>n;
for(int i = 1;i<=n;i++)
{
cin>>p[i].w;
p[i].id=i;
}
for(int i = 1;i<=n;i++)
{
cin>>p[i].h;
}
sort(p+1,p+n+1);//排序
for(int i = 1;i<=n;i++) cout<<p[i].id<<" ";
}
那不熟悉重定义的同学可以看看下面的 比较函数,这个好理解一点
bool cmp(node a,node b)
{
return a.w/a.h/a.h>b.w/b.h/b.h;//用题目的方法排序
}
模拟呜呜呜,不想判断啊啊啊。
联系上下文,我们可知这道题的本质就是模拟和判断,所以,肝就完了。
#include <iostream>
using namespace syh;
int n, m, q;
char a[505][505];
char lq(int i,int j)
{
if(a[i][j]=='*') return '*';//是雷就不用判断了
else
{
int sum=0;//计算有几个雷
//在8方向判断是否越界以及是否是雷
if((i+1<=n&&a[i+1][j]=='*')) sum++;
if((i-1>=1&&a[i-1][j]=='*')) sum++;
if((j+1<=m&&a[i][j+1]=='*')) sum++;
if((j-1>=1&&a[i][j-1]=='*')) sum++;
if((i+1<=n&&j+1<=m&&a[i+1][j+1]=='*')) sum++;
if((i+1<=n&&j-1>=1&&a[i+1][j-1]=='*')) sum++;
if((i-1<=n&&j+1<=m&&a[i-1][j+1]=='*')) sum++;
if((i-1>=1&&j-1>=1&&a[i-1][j-1]=='*')) sum++;
return sum+'0';//字符数组要加上字符0
}
}
int main()
{
cin>>n>>m>>q;
for(int i = 1;i<=q;i++)
{
int x, y;
cin>>x>>y;
a[x][y]='*';//先把雷赋值在数组里
}
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=m;j++)
{
a[i][j]=lq(i,j);//定义每个数组里的元素
}
}
//最后输出雷阵
for(int i = 1;i<=n;i++)
{
for(int j = 1;j<=m;j++)
{
cout<<a[i][j]<<" ";
}
cout<<"\n";
}
}
这篇到此就结束了啊,祝大家考试顺利,每次都跳级/满分!!!
全部评论 2
d
6天前 来自 浙江
0一起加油
6天前 来自 浙江
0












有帮助,赞一个