标签:copy 格式 printf reg main 解析 string algo sam
做数学寒假作业的怨念……
给定两个整点的坐标,求它们所在直线的函数解析式(一次函数)。
输入格式:
输入共两行。
第一行有两个整数x1,y1。表示第一个整点的坐标为(x1,y1)
第二行有两个整数x2,y2。表示第二个整点的坐标为(x2,y2)
输出格式:
输出共一行,即这个函数解析式。
二乘X表示为2x
二分之一乘X表示为1/2*x
数学+模拟
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; char kc,bc; int n,x1,x2,y1,y2,kx,ky,bx,by,gcd; int read() { int x=0,f=1; char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-‘0‘,ch=getchar(); return x*f; } int GCD(int a,int b) { if(b==0) return a; return GCD(b,a%b); } int main() { x1=read(),y1=read(); x2=read(),y2=read(); gcd=GCD(y2-y1,x2-x1); kx=(y2-y1)/gcd,ky=(x2-x1)/gcd; if(kx>0&&ky>0||kx<0&&ky<0) kc=‘+‘; else kc=‘-‘; gcd=GCD(ky*y1-kx*x1,ky); bx=(ky*y1-kx*x1)/gcd,by=ky/gcd; if(bx>0&&by>0||bx<0&&by<0) bc=‘+‘; else bc=‘-‘; kx=abs(kx),ky=abs(ky),bx=abs(bx),by=abs(by); if(ky==1) { if(kc==‘+‘) { if(bx==0) printf("y=%dx",kx); else if(by==1) printf("y=%dx%c%d",kx,bc,bx); else printf("y=%dx%c%d/%d",kx,bc,bx,by); } else { if(bx==0) printf("y=%c%dx",kc,kx); else if(by==1) printf("y=%c%dx%c%d",kc,kx,bc,bx); else printf("y=%c%dx%c%d/%d",kc,kx,bc,bx,by); } } else { if(kc==‘+‘) { if(bx==0) printf("y=%d/%dx",kx,ky); else if(by==1) printf("y=%d/%dx%c%d",kx,ky,bc,bx); else printf("y=%d/%dx%c%d/%d",kx,ky,bc,bx,by); } else { if(bx==0) printf("y=%c%d/%dx",kc,kx,ky); else if(by==1) printf("y=%c%d/%d*x%c%d",kc,kx,ky,bc,bx); else printf("y=%c%d/%d*x%c%d/%d",kc,kx,ky,bc,bx,by); } } return 0; }
标签:copy 格式 printf reg main 解析 string algo sam
原文地址:http://www.cnblogs.com/z360/p/7853833.html