欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > xtu oj 交叉点

xtu oj 交叉点

2025/2/8 2:17:35 来源:https://blog.csdn.net/L3102250566/article/details/144478945  浏览:    关键词:xtu oj 交叉点

文章目录

  • 回顾
  • 前言
  • 代码
  • 思路

回顾

  • A+B III
  • 问题 H: 三角数
  • 问题 G: 3个数
  • 等式 数组下标查询,降低时间复杂度
  • 1405 问题 E: 世界杯
  • xtu 数码串
  • xtu oj 神经网络
  • xtu oj 1167 逆序数(大数据)
  • xtu oj 原根
  • xtu oj 不定方程的正整数解
  • xtu oj 最多的可变换字符串
  • xtu oj String I
  • xtu oj 字母序列
  • xtu oj 分段
  • xtu oj 完全平方数II
  • xtu oj 连接字符串
  • xtu oj 2021
  • xtu oj 数字
  • xtu oj 删除
  • xtu oj 聚会
  • xtu oj Distance
  • xtu oj 制药
  • xtu oj 1618 素数个数

前言

偏移量的问题

代码

#include<stdio.h>
#define N 40char s[N][N];int get_ans(int x,int y,int dx,int dy){//判断行,列,斜方向能不能构成连续的三个棋子,假设可以返回 1 int cnt=0;//x,y 表示给定的点的坐标,dx 和 dy 表示偏移量,cnt 表示连续的棋子的个数for(int i=-2;i<=2;i++){int hhh_x=x+i*dx;int hhh_y=y+i*dy;//表示更新之后的点的坐标if(s[hhh_x][hhh_y]=='*'){//假设是棋子cnt++;if(cnt>=3){return 1;}}else{cnt=0;//是空格就中断计数器,重新开始计数}}return 0;
}int main(){int t;int qaq=1;//为了输出 case 进行到哪儿了scanf("%d",&t);while(t--){for(int i=0;i<N;i++){//把没用到的都初始化为空格for(int j=0;j<N;j++){s[i][j]='.';}}int n,m;scanf("%d%d",&n,&m);for(int i=2;i<n+2;i++){//输入的时候就防止下标越界scanf("%s",s[i]+2);}int num=0;//存交叉点的数目int x[N*N];int y[N*N];//注意所有点都可能是交叉点,极端情况是所有点都是棋子,n*m 个交叉点for(int i=2;i<n+2;i++){for(int j=2;j<m+2;j++){if(s[i][j]=='*'){int ans=0;//表示的是行,列,对角线,四个方向有几个方向满足条件,最开始是 0 ,表示没有方向//满足条件ans+=get_ans(i,j,0,1);//行ans+=get_ans(i,j,1,0);//列ans+=get_ans(i,j,1,1);//左上到右下ans+=get_ans(i,j,1,-1);//左下到右上if(ans>=2){//假设有两个方向满足条件,就表示该点是交叉点x[num]=i-2;y[num]=j-2;num++;}}}}//下面是输出printf("Case %d:%d\n",qaq,num);qaq++;for(int i=0;i<num;i++){printf("%d %d\n",x[i],y[i]);}}return 0;
}

思路

之前图方便,代码块之间都没有空行,还是空行好一些,能带来更好的阅读体验。感觉这种位置偏移量的题非常经典,这个模拟题也是非常经典。输入的时候,每次碰到这种二维数组我都非常害怕,刚刚搜了一下好像就用这种 %s 是最方便的,其他的输入方式挺麻烦。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com