【洛谷 1355】神秘大三角

问题描述
给出三角形的三点坐标,另给出一点,判断这个点与三角形关系。在三角形内输出1,在外输出2,在线段上输出3,顶点上输出4.
样例输入
(0,0)
(3,0)
(0,3)
(1,1)
样例输出
1
算法讨论
读入后看是否在顶点上,在的话则输出4并终止;利用叉积分别求出点于三边关系,若有任意一边的叉积为0 且点在这条线段内 ,则输出3;若在三角形内则点都会在三条边的同一侧(枚举顶点时要顺着一个方向),即叉积都为正数或都为负数,则在里面,输出1;若不是则在外面,输出2.

var
  a:array[0..4,1..2] of longint;
  i,j,n,m1,m2,m3,t,p,f1,f2:longint;
  st:string;

function cp(x1,y1,x2,y2,x,y:longint):longint;
var
  h:longint;
begin
  h:=(x1-x)*(y2-y)-(x2-x)*(y1-y);
  exit(h)
end;

function check(x1,y1,x2,y2,x,y:longint):boolean;
begin
  if (x>x1) and (x>x2) or (y>y1) and (y>y2) or (x<x1) and (x<x2) or (y<y1) and (y<y2)
    then exit(false)
    else exit(true)
end;

begin
  for i:=1 to 4 do
    begin
      readln(st);
      for j:=2 to length(st) do
        if st[j]=','
          then break;
      t:=1;
      p:=j;
      for j:=p-1 downto 2 do
        begin
          val(st[j],n);
          a[i,1]:=a[i,1]+n*t;
          t:=t*10
        end;
      inc(p);
      for j:=2 to length(st) do
        if st[j]=')'
          then break;
      t:=1;
      for j:=length(st)-1 downto p do
        begin
          val(st[j],n);
          a[i,2]:=a[i,2]+n*t;
          t:=t*10
        end;
    end;
  for i:=1 to 3 do
    if (a[i,1]=a[4,1]) and (a[i,2]=a[4,2])
      then begin
             write(4);
             halt
           end;
  m1:=cp(a[2,1],a[2,2],a[4,1],a[4,2],a[1,1],a[1,2]);
  if (m1=0) and (check(a[1,1],a[1,2],a[2,1],a[2,2],a[4,1],a[4,2]))
    then begin
           write(3);
           halt
         end;
  if m1>0
    then inc(f1)
    else inc(f2);
  m2:=cp(a[3,1],a[3,2],a[4,1],a[4,2],a[2,1],a[2,2]);
  if (m2=0) and (check(a[2,1],a[2,2],a[3,1],a[3,2],a[4,1],a[4,2]))
    then begin
           write(3);
           halt
         end;
  if m2>0
    then inc(f1)
    else inc(f2);
  m3:=cp(a[1,1],a[1,2],a[4,1],a[4,2],a[3,1],a[3,2]);
  if (m3=0) and (check(a[3,1],a[3,2],a[1,1],a[1,2],a[4,1],a[4,2]))
    then begin
           write(3);
           halt
         end;
  if m3>0
    then inc(f1)
    else inc(f2);
  if (f1=3) or (f2=3)
    then write(1)
    else write(2)
end.

这里写图片描述
Pixiv ID:61826383

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【1】项目代码完整且功能都验证ok,确保稳定可靠运行后才上传。欢迎下载使用!在使用过程中,如有问题或建议,请及时私信沟通,帮助解答。 【2】项目主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 【3】项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 【4】如果基础还行,或热爱钻研,可基于此项目进行二次开发,DIY其他不同功能,欢迎交流学习。 【注意】 项目下载解压后,项目名字和项目路径不要用中文,否则可能会出现解析不了的错误,建议解压重命名为英文名字后再运行!有问题私信沟通,祝顺利! 基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip基于C语言实现智能决策的人机跳棋对战系统源码+报告+详细说明.zip
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值