nyoj-1016-德莱联盟(向量叉乘判断线段相交)

叉乘的坐标表示:

A(X1,Y1), B(X2, Y2), C(XC,YC), D(XD, YD);
AB = (X2-X1, Y2-Y1);
CD = (XD-XC, YD-YC);

向量AB,CD的叉乘为:
AB*CD= (X2-X1)*(YD-YC)-(Y2-Y1)*(X2-X1);
例如两条直线,ab,cd来判断是否相交则根据
ans = (cd叉乘ca)*(cd叉乘bd)
如果ans大于等于0则相交,否则不相交。

下面是判断代码:

 1 /*
 2 Name:nyoj-1016-德莱联盟
 3 Copyright:
 4 Author:
 5 Date: 2018/4/26 10:24:45
 6 Description:
 7 */
 8 #include <stdio.h>
 9 #include <iostream>
10 using namespace std;
11 struct point{
12     double x,y;
13 };
14 int cross(point a,point b1,point b2){//求(b1-a) 和(b2-a) 的叉乘 
15     double x1,y1,x2,y2;
16     x1=b1.x-a.x;
17     y1=b1.y-a.y;
18     x2=b2.x-a.x;
19     y2=b2.y-a.y;   
20     return x1*y2-x2*y1;
21 }
22 int main()
23 {
24     int t;
25     cin>>t;
26     while(t--)
27     {
28         double ans1, ans2, ans3, ans4;
29         point A,B,C,D;
30         cin>>A.x>>A.y>>B.x>>B.y;//AB点的坐标 
31         cin>>C.x>>C.y>>D.x>>D.y;//CD点的坐标 
32         ans1=cross(A,C,D);  //注意cross中向量的顺序,要相减的向量放在前面;向量CA和向量DA的叉乘 
33         ans2=cross(B,C,D);
34         ans3=cross(C,A,B);
35         ans4=cross(D,A,B);
36         if(ans1*ans2<0 && ans3*ans4<0){//判断点是否在同侧,如果AB在CD的同侧,不能相交 
37             printf("Interseetion\n");      
38         } else {
39             printf("Not Interseetion\n");  
40         }
41     
42     }
43 }

 

转载于:https://www.cnblogs.com/evidd/p/8952760.html

孪生素数是指两个素数之间的差值为2的素数对。通过筛选可以找出给定素数范围内的所有孪生素数的组数。 在引用的代码中,使用了递归筛选来解决孪生素数问题。该程序首先使用循环将素数的倍数标记为非素数,然后再遍历素数数组,找出相邻素数之间差值为2的素数对,并统计总数。 具体实现过程如下: 1. 定义一个数组a[N,用来标记数字是否为素数,其中N为素数范围的上限。 2. 初始化数组a,将0和1标记为非素数。 3. 输入要查询的孪生素数的个数n。 4. 循环n次,每次读入一个要查询的素数范围num。 5. 使用两层循环,外层循环从2遍历到num/2,内层循环从i的平方开始,将素数的倍数标记为非素数。 6. 再次循环遍历素数数组,找出相邻素数之间差值为2的素数对,并统计总数。 7. 输出总数。 至此,我们可以使用这个筛选的程序来解决孪生素数问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python用递归筛选求N以内的孪生质数(孪生素数)](https://blog.csdn.net/weixin_39734646/article/details/110990629)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [NYOJ-26 孪生素数问题](https://blog.csdn.net/memoryofyck/article/details/52059096)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值