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<r≤1030≤|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针对“单个测试点包含多组数据”的解决的主要内容,如果未能解决你的问题,请参考以下文章