码迷,mamicode.com
首页 > 其他好文 > 详细

洛谷——P2026 求一次函数解析式

时间:2017-11-18 11:10:21      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:copy   格式   printf   reg   main   解析   string   algo   sam   

P2026 求一次函数解析式

题目背景

做数学寒假作业的怨念……

题目描述

给定两个整点的坐标,求它们所在直线的函数解析式(一次函数)。

输入输出格式

输入格式:

 

输入共两行。

第一行有两个整数x1,y1。表示第一个整点的坐标为(x1,y1)

第二行有两个整数x2,y2。表示第二个整点的坐标为(x2,y2)

 

输出格式:

 

输出共一行,即这个函数解析式。

 

输入输出样例

输入样例#1: 复制
【一】
3 6
2 4
【二】
3 5
2 7
【三】
3 -1
5 -2
输出样例#1: 复制
【一】
y=2x
【二】
y=-2x+11
【三】
y=-1/2*x+1/2

说明

二乘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;
}

 

洛谷——P2026 求一次函数解析式

标签:copy   格式   printf   reg   main   解析   string   algo   sam   

原文地址:http://www.cnblogs.com/z360/p/7853833.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!