11.06针对“单个测试点包含多组数据”的解决

Posted 贝里先生

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了11.06针对“单个测试点包含多组数据”的解决相关的知识,希望对你有一定的参考价值。

while (~scanf("%d%d",&n,&m))等效于 while (scanf("%d%d",&n,&m)!=EOF)

~是按位取反

scanf的返回值是输入值的个数

如果没有输入值就是返回-1

-1按位取反结果是0

while(~scanf("%d", &n))就是当没有输入的时候退出循环

 

下面是例子

题目描述

求两个圆的位置,形状的关系。

  • 如果两个圆重合(圆心和半径都相同),输出 "fu zhi zhan tie bu xiang ma"
  • 如果两个圆全等(半径相同),输出 "zong you ren yao yong jian pan ai ge qiao"
  • 如果两个圆同心(圆心相同),输出 "Ctrl+C/V tian xia di yi"
  • 如果两个圆内含(圆心距小于半径之差),输出 "zhe ci ying gai dou hui fu zhi le ba"
  • 如果两个圆内切(圆心距等于半径之差),输出 "oo00OO00ooo0OO0oo0OooO00oo"
  • 如果两个圆相交(半径之差小于圆心距,圆心距小于半径之和),输出 "lIllIIlI11lIIIlIl1l1111"
  • 如果两个圆外切(圆心距等于半径之和),输出 "rrnnmnrmrnmrnrmnrmrnrm"
  • 如果两个圆相离(半径之和小于圆心距),输出 "qpgqopgqopgopqgpqggqpoogoo"

以上输出内容均不包含引号。

以上判断优先级从高到低。例如:两个圆重合并且内切,重合的优先级高于内切的优先级,所以输出重合的对应信息。

输入格式

本题单个测试点包含多组数据。

每组数据输入两行,每行三个整数,分别表示圆心坐标 x,yx,y ,圆的半径 rr ,其中 0|x|,|y|103, 0<r1030≤|x|,|y|≤103, 0<r≤103。

输出格式

每组数据输出一行,见题目描述。

答案如下

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main()
 5 {
 6     int x1, x2, y1, y2, r1, r2;
 7     int d, add, sub;
 8 
 9     while (~scanf("%d%d%d%d%d%d", &x1, &y1, &r1, &x2, &y2, &r2))
10     {
11         d = (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2); // 圆心距
12         add = (r1 + r2) * (r1 + r2); // 半径之和
13         sub = (r1 - r2) * (r1 - r2); // 半径之差
14 
15         if (x1 == x2 && y1 == y2 && r1 == r2) // 重合
16         {
17             printf("fu zhi zhan tie bu xiang ma\n");
18         }
19         else if (r1 == r2) // 全等
20         {
21             printf("zong you ren yao yong jian pan ai ge qiao\n");
22         }
23         else if (x1 == x2 && y1 == y2) // 同心
24         {
25             printf("Ctrl+C/V tian xia di yi\n");
26         }
27         else if (sub > d) // 内含
28         {
29             printf("zhe ci ying gai dou hui fu zhi le ba\n");
30         }
31         else if (sub == d) // 内切
32         {
33             printf("oo00OO00ooo0OO0oo0OooO00oo\n");
34         }
35         else if (sub < d && d < add) // 相交
36         {
37             printf("lIllIIlI11lIIIlIl1l1111\n");
38         }
39         else if (add == d) // 外切
40         {
41             printf("rrnnmnrmrnmrnrmnrmrnrm\n");
42         }
43         else if (add < d) // 相离
44         {
45             printf("qpgqopgqopgopqgpqggqpoogoo\n");
46         }
47     }
48 
49     return 0;
50 }

 

以上是关于11.06针对“单个测试点包含多组数据”的解决的主要内容,如果未能解决你的问题,请参考以下文章

11.06

11.06

11.06第九次

11.06

11.06 知识整理

(11.06)Java小知识