• 【暑期每日一题】洛谷 P2026 求一次函数解析式


    题目链接:P2026 求一次函数解析式 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

    题目背景

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

    题目描述

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

    输入格式

    输入共两行。

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

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

    输出格式

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

    样例 #1

    样例输入 #1

    1. 3 6
    2. 2 4

    样例输出 #1

    y=2x

    样例 #2

    样例输入 #2

    1. 3 5
    2. 2 7

    样例输出 #2

    y=-2x+11

    样例 #3

    样例输入 #3

    1. 3 -1
    2. 5 -2

    样例输出 #3

    y=-1/2*x+1/2

    提示

    二乘X表示为2x

    二分之一乘X表示为1/2\*x

    AC code:

    1. #include<iostream>
    2. #include<algorithm>
    3. using namespace std;
    4. // y=k*x+b;
    5. // k=(y2-y1)/(x2-x1)
    6. // b=y-k*x;
    7. int main()
    8. {
    9. int x1,y1;
    10. cin>>x1>>y1;
    11. int x2,y2;
    12. cin>>x2>>y2;
    13. int k_fz,k_fm; // 斜率分子,分母
    14. k_fz=y2-y1;
    15. k_fm=x2-x1;
    16. // 斜率为整数(截距一定也为整数)
    17. if(k_fz%k_fm==0)
    18. {
    19. int b=y1-(k_fz/k_fm)*x1;
    20. if(b>0)
    21. cout<<"y="<<k_fz/k_fm<<"x"<<"+"<<b<<endl;
    22. else if(b<0)
    23. cout<<"y="<<k_fz/k_fm<<"x"<<b<<endl;
    24. else
    25. cout<<"y="<<k_fz/k_fm<<"x"<<endl;
    26. return 0;
    27. }
    28. // 斜率为分数
    29. if(k_fz*1.0/k_fm>0) // 斜率为正数
    30. {
    31. k_fz=abs(y2-y1);
    32. k_fm=abs(x2-x1);
    33. // 斜率化成最简分数
    34. k_fz=k_fz/__gcd(k_fz,k_fm);
    35. k_fm=k_fm/__gcd(k_fz,k_fm);
    36. int b_fz,b_fm; // 截距分子,分母
    37. b_fz=y1*k_fm-k_fz*x1;
    38. b_fm=k_fm;
    39. if(b_fz%b_fm==0) // 截距为整数
    40. {
    41. if(b_fz*1.0/b_fm>0)
    42. cout<<"y="<<abs(k_fz)<<"/"<<abs(k_fm)<<"*x"<<"+"<<b_fz/b_fm<<endl;
    43. else if(b_fz*1.0/b_fm<0)
    44. cout<<"y="<<abs(k_fz)<<"/"<<abs(k_fm)<<"*x"<<b_fz/b_fm<<endl;
    45. else
    46. cout<<"y="<<abs(k_fz)<<"/"<<abs(k_fm)<<"*x"<<endl;
    47. return 0;
    48. }
    49. if(b_fz*1.0/b_fm>0)
    50. cout<<"y="<<abs(k_fz)<<"/"<<abs(k_fm)<<"*x"<<"+"<<abs(b_fz)/__gcd(abs(b_fz),abs(b_fm))<<"/"<<abs(b_fm)/__gcd(abs(b_fz),abs(b_fm))<<endl;
    51. else if(b_fz*1.0/b_fm<0)
    52. cout<<"y="<<abs(k_fz)<<"/"<<abs(k_fm)<<"*x"<<"-"<<abs(b_fz)/__gcd(abs(b_fz),abs(b_fm))<<"/"<<abs(b_fm)/__gcd(abs(b_fz),abs(b_fm))<<endl;
    53. else
    54. cout<<"y="<<abs(k_fz)<<"/"<<abs(k_fm)<<"*x"<<endl;
    55. }
    56. else // 斜率为负数
    57. {
    58. k_fz=abs(y2-y1);
    59. k_fm=abs(x2-x1);
    60. // 斜率化成最简分数
    61. k_fz=k_fz/__gcd(k_fz,k_fm);
    62. k_fm=k_fm/__gcd(k_fz,k_fm);
    63. int b_fz,b_fm; // 截距分子,分母
    64. b_fz=y1*k_fm+k_fz*x1; // 注意此时为 "+" 号 (因为斜率为负数)
    65. b_fm=k_fm;
    66. if(b_fz%b_fm==0) // 截距为整数
    67. {
    68. if(b_fz*1.0/b_fm>0)
    69. cout<<"y="<<"-"<<abs(k_fz)<<"/"<<abs(k_fm)<<"*x"<<"+"<<b_fz/b_fm<<endl;
    70. else if(b_fz*1.0/b_fm<0)
    71. cout<<"y="<<"-"<<abs(k_fz)<<"/"<<abs(k_fm)<<"*x"<<b_fz/b_fm<<endl;
    72. else
    73. cout<<"y="<<"-"<<abs(k_fz)<<"/"<<abs(k_fm)<<"*x"<<endl;
    74. return 0;
    75. }
    76. if(b_fz*1.0/b_fm>0)
    77. cout<<"y="<<"-"<<abs(k_fz)<<"/"<<abs(k_fm)<<"*x"<<"+"<<abs(b_fz)/__gcd(abs(b_fz),abs(b_fm))<<"/"<<abs(b_fm)/__gcd(abs(b_fz),abs(b_fm))<<endl;
    78. else if(b_fz*1.0/b_fm<0)
    79. cout<<"y="<<"-"<<abs(k_fz)<<"/"<<abs(k_fm)<<"*x"<<"-"<<abs(b_fz)/__gcd(abs(b_fz),abs(b_fm))<<"/"<<abs(b_fm)/__gcd(abs(b_fz),abs(b_fm))<<endl;
    80. else
    81. cout<<"y="<<"-"<<abs(k_fz)<<"/"<<abs(k_fm)<<"*x"<<endl;
    82. }
    83. return 0;
    84. }

  • 相关阅读:
    多功能频率计周期/脉宽/占空比/频率测量verilog,视频/代码
    机器学习-模型评估与选择(第2章)课后习题
    Logback 日志格式参数说明
    异常检测 | MATLAB实现BiLSTM(双向长短期记忆神经网络)数据异常检测
    目标检测YOLO实战应用案例100讲-基于改进YOLOv6的轧钢表面细小缺陷检测
    C 语言的整数类型
    Nginx 文件名逻辑漏洞(CVE-2013-4547)(Vulhub)
    JSP中page指令的import命令具有什么功能呢?
    接口幂等性最佳实践--redis+注解
    L1-085 试试手气-乘法口诀数列 (20 分)-PAT 团体程序设计天梯赛 GPLT
  • 原文地址:https://blog.csdn.net/m0_57587757/article/details/125472993