题目背景
本人最初作
以此纪念伟大的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为常数)
常数始终保留四位小数
输入输出样例
说明
切记要分类
数据不需判错
100%的数据,3<=n<=16(够水吧)
没学过函数的自己百度
思路:模拟。
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int n; char s[10]; double x0,y0,a,b,c,d; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%s",s);int sum=0,sum2=0; for(int j=0;j<n;j++){ if(s[j]=='1') sum++; if(s[j]=='x') sum2++; if(s[j]=='x') if(!a){ b=i;a=j+1; } else { d=i;c=j+1; } } if(sum==n) y0=i; if(!y0&&sum2+sum==n) y0=i; else if(sum==1&&sum2==0){ for(int j=0;j<n;j++) if(s[j]=='1'){ x0=j+1;break; } } } b=y0-b;d=y0-d;a=a-x0;c=c-x0; if(a-c==0){ printf("x=%.4lf",a);return 0; } if(b-d==0){ printf("y=%.4lf",b);return 0; } double k=(b-d)*1.0/(a-c)*1.0; double B=b-a*k; if(B>0) printf("y=%.4lfx+%.4lf",k,B); else if(B<0) printf("y=%.4lfx%.4lf",k,B); else if(B==0) printf("y=%.4lfx",k); }