P2067 Cytus-Holyknight

题目背景

本人最初作 以此纪念伟大的ios、安卓、PSV平台音乐游戏《cytus》

后续将不断更新。

-------------Chapter V-1-------------

话说两位战士整天靠在一起好无聊啊,于是她们打算——玩游戏!(?)

她们就用剑画了一个十字架,然后开始抛石子,好好玩啊(???)

两个人每人有一个石子,当她们丢完后,正在自学数学的小蓝大叫:把他们连起来不就是一次函数吗!! 于是乎,她们就连了起来,然后她们开始计算。此时她们发现一个严重的问题——没有草稿纸!(这什么破问题= =)

由于脑补能力太低,她们只好让你来帮帮忙啦~

题目描述

给出图形(十字架可以视为x轴和y轴),请计算出函数解析式。

输入格式

第一行,一个正整数n,表示该图形大小是n*n;

接下来n行,每行n个字符,1表示坐标轴,x表示石子,0表示空地。

横行的1是x轴,竖列的1是y轴。 上下两行,左右两列的距离恒为1。

输出格式

输出一行,即y=kx+b,或y=kx,y=b,x=b;(k,b为常数)

常数始终保留四位小数

输入输出样例

输入 #1复制

3

010

111

x1x

输出 #1复制

y=-1.0000

说明/提示

切记要分类

数据不需判错

100%的数据,3<=n<=16

代码:

#include<iostream> 
#include <algorithm>
using namespace std;
char c[20][20];
int main(){
	int n;
	cin>>n;
	int cnt1=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>c[i][j];
			if(c[i][j]=='1'){
				cnt1++;//统计‘1’的个数
			}
		}
	}
	int x0=1,y0=1;
	int x1=1,y1=1;
	bool flag=0;
	int x2=1,y2=1;
	bool flag1=1; 
	int x3=1,y3=1;
	int x4=1,y4=1;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(c[i][j]=='x'&&flag==0){//判断第一个x的位置
				x1=i;
				y1=j;
				flag=1;
			}
			else if(c[i][j]=='x'&&flag1==1){//判断第二个x的位置
				x2=i;
				y2=j;
				flag1=0;
			}
		}
	}
	if(cnt1==2*n-1){//查看x是否在坐标轴上,也就是‘1’上
		for(int i=1;i<=n;i++){//若不在,寻找坐标原点的位置
			int p=0;
			for(int j=1;j<=n;j++){
				if(c[i][j]=='1'){
					p++;
				}
			}
			if(p==n){
				x0=i;
			}
		}
		for(int i=1;i<=n;i++){
			int q=0;
			for(int j=1;j<=n;j++){
				if(c[j][i]=='1'){
					q++;
				}
			}
			if(q==n){
				y0=i;
			}
		}
		
	}
	else{//若x在坐标轴上,则判断坐标原点的位置
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				if((c[i][j]=='1'||c[i][j]=='x')&&(c[i-1][j]=='1'||c[i-1][j]=='x')&&(c[i][j-1]=='1'||c[i][j-1]=='x')&&(c[i][j+1]=='1'||c[i][j+1]=='x')&&(c[i+1][j]=='1'||c[i+1][j]=='x')){
					x0=i;
					y0=j;
				}	
			}
		}	
	}
//	cout<<x0<<" "<<y0<<"\n";
//	cout<<x1<<" "<<y1<<"\n";
//	cout<<x2<<" "<<y2<<"\n";
	x3=y1-y0;
	x4=y2-y0;
	y3=x0-x1;
	y4=x0-x2;//求出两个x的坐标
//	cout<<x3<<" "<<y3<<"\n";
//	cout<<x4<<" "<<y4<<"\n";
	int d1=y3-y4;
	int d2=x3-x4;
	if(d1==0&&d2!=0){
		double d=y3;
		printf("y=%.4lf",d);
	}if(d1!=0&&d2==0){
		double d1=x3;
		printf("x=%.4lf",d1);
	}if(d1!=0&&d2!=0){
		double k=1.0*d1/d2;
		double b=1.0*y3-k*x3;
		if(b==0){
			printf("y=%.4lfx",k);
		}
		else if(b>0){
			printf("y=%.4lfx+%.4lf",k,b);
		}else{
			printf("y=%.4lfx%.4lf",k,b);
		}
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ssssss555555777777

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值