问题 G: 推雪人

题目描述

冬天到了,开始下雪了。松神和二哥决定出去推雪人。大家都知道一个雪人由两个雪球组成。松神和二哥决定分工合作,每人分别先滚若干个雪球,然后再组合在一起。一个小时后,松神一共滚了n个雪球,每个雪球的半径分别为a1,a2,a3...,an,与此同时,二哥一共滚了m个雪球,每个雪球的半径分别为b1,b2,b3,...,bn。他们决定每人选择出一个雪球然后推成一个雪人。由于美观的原因,假设两个雪球的半径分别为r1,r2(r1<=r2),他们认为当雪人的两个雪球的半径满足3/2*r1<=r2<=2*r1时,那么这个雪人是美观的。你能告诉他们,他们是否能够组成一个美观的雪人吗?

输入

多组测试数据。
每组测试数据的第一行为两个正整数n,m(1<=n,m<=100)。
第二行为n个由空格分隔的正整数代表松神滚得雪球的半径。
第三行为m个由空格分隔的正整数代表二哥滚得雪球的半径。
所有雪球的半径均不大于100。

输出

对于每组测试数据,若松神和二哥能够组成一个美观的雪人,则输出"Yes",否则输出"No"。

样例输入

2 1 2 3 2 1 2 4 9 10

样例输出

Yes No


#include <stdio.h>
int main()
{
    int n,m,a[100],b[100],j,t;
    while ((scanf("%d%d",&n,&m))!= EOF)
    {
        int i,k;
        for(i=0;i<n;i++)
        scanf("%d",&a[i]);
        for(k=0;k<m;k++)
        scanf("%d",&b[k]);
        for(j=0;j<n;j++)
        {
            for(t =0;t<m;t++)
            {
            if((a[j]>=3/2*b[t]&&a[j]<=2*b[t])||(b[t]>=3/2*a[j]&&b[t]<=2*a[j]))
                break;
            }
            if(t<m)
            break;
        }
        if(j<n)
        printf("Yes\n");
        else
        printf("No\n");
    }
    return 0;    
}

思路解析:

1、每个人堆多个雪球,那么用数组分别储存这些学球的半径。

2、只要有一组数据可以满足题中所给条件,那么要将所有的数遍历一遍,同时判断是否符合条件。

3、因为有两个数组,当a[0]确定时,要与b[0].b[1],b[2]b,b[3]......进行比较,当a[1]确定时,再与b[0].b[1],b[2]b,b[3]......进行比较。所以要将循环嵌套。

4、不一定数组a一定为半径小的一组,只要两者种有两个数充当r1,r2并满足题中所给条件,即可输出YES。

猜你喜欢

转载自blog.csdn.net/xx1257gd/article/details/81124560