huffacm有规则的犯罪

题目描述:

臭名昭著的罪犯ss犯下的三项大胆罪行震撼了HFUU。

HFUU的地图由n×m的矩形表表示。地图上表格的每个单元格代表首都的某些地区。

HFUU的侦探zx绘制了地图,并在其中标出了前三起抢劫案中标有星号的地区。

zx经过推导后发现,第四起抢劫案将在该地区进行,并且将所有四个抢劫区连起来将形成一个矩形。

zx擅长演绎,但数学无望。因此,他要求您找到将要进行第四次抢劫的地区

输入要求有:

第一行输入n,m来代表地图上的行和列

用“ . ”来表示未被抢劫

用“ * ”来表示已被抢劫

输出要求:

输出:

如果可以构成矩形,则输出下一次要抢劫的坐标

如果不行就输出“-1”

思路:

用二维字符串来读取相应的地图

用getchar()来消去回车的影响

然后用for循环嵌套来判断数组的值是否为“*”

并且记录三个点的坐标 

    for(i=0;i<n;i++){
        for(j=0;j<m;j++){
            if(arr[i][j]=='*'){
                if(temp==0){
                temp1=i+1;//x1
                temp2=j+1;//y1
                temp++;
            }else if(temp==1){
                temp3=i+1;//x2
                temp4=j+1;//y2
                temp++;
            }else if(temp==2){
                temp5=i+1;//x3
                temp6=j+1;//y3
            }
    
            }
        }
    }

 此时只需用判断第四个“ * ”的位置即可

根据题意,此时应当判断是否存在“ * ” 点能在此数组里形成矩形,来判断输出 -1 的情况

即当有两个点的横坐标相等,有两个纵坐标相等时,保证形成一个直角,所以能形成一个矩形。反之输出 -1 ,即不能形成题目所需的矩形。

实现代码如下

	        int sum1=temp1-temp3;//x1-x2
			int sum2=temp2-temp4;//y1-y2
			int sum3=temp3-temp5;//x2-x3
			int sum4=temp5-temp1;//x3-x1
			int sum5=temp6-temp2;//y3-y1
			int sum6=temp4-temp6;//y2-y3

//此处应注意数据类型,否则数据过大时会爆int

if( sum1 * sum3 * sum4 + sum2 * sum5 * sum6 != 0){
        printf (" -1 ");
}

在此时分成四种情况来判断第四点的坐标

直接上代码

	if((temp1==temp3&&temp2==temp4)||temp1==temp4&&temp2==temp4))
	printf("%d %d",temp3+temp5-temp1,temp4+temp6-temp2);
	
	else if((temp3==temp1&&temp4==temp6)||(temp3==temp5&&temp4==temp2))
	printf("%d %d",temp1+temp5-temp3,temp2+temp6-temp4);
	
	else if((temp5==temp1&&temp6==temp4)||(temp5==temp3&&temp6==temp2))
	printf("%d %d",temp1+temp3-temp5,temp2+temp4-temp6);
	else
	printf("-1");

就能得出结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值