DotcppXF


私信TA

用户名:dotcpp0599925

访问量:2121

签 名:

层楼终究误少年

等  级
排  名 151
经  验 6163
参赛次数 0
文章发表 13
年  龄 0
在职情况 学生
学  校 华南理工大学
专  业 计算机科学与技术

  自我简介:

The sad truth is, not everyone will accomplish something great. Some of us may just have to find meaning in the little moments that make up life.


【解题思路】


        ① 明确何时该取第一个数组的值,何时该取第二个数组的值,总结出判断条件;

        ② 明确结束条件,通过循环处理至结束。



【1】判断结束的条件


        根据题意,自然是两个数组需要处理的数都处理完了为结束,表达式有多种形式的写法:


while(ar-al+br-bl>-2)                         // al为第一个数组a[]的左区间,ar为它的右区间
                                              // bl为第二个数组b[]的左区间,br为它的右区间
while(al<=ar||bl<=br)



【2】取第一个数组的值的条件


        ① 两种情况,第一种是:第二个数组的值都取完了;


bl>br


        ② 第二种是:第一个数组的值没取完,且 a[al]<b[bl] ;


a[al]<b[bl]&&al<=ar



【3】取第二个数组的值的条件


        与第一个数组时原理一样,不再赘述:


(a[al]>b[bl]&&bl<=br)||al>ar



【注意事项】


        ① 判断条件不要写错,特别是边界上的处理。



【参考代码】


#include<stdio.h>

int main(void)
{
    int a[100001],b[100001],n,m,al,ar,bl,br;
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    scanf("%d%d",&al,&ar);
    for(int i=1;i<=m;i++)
        scanf("%d",&b[i]);
    scanf("%d%d",&bl,&br);
    while(ar-al+br-bl>-2)                                  // 循环条件,判断是否处理完
    {
        if((a[al]<b[bl]&&al<=ar)||bl>br)                   // 取第一个数组的值
        {
            printf("1 ");
            al++;
        }
        else if((a[al]>b[bl]&&bl<=br)||al>ar)              // 取第二个数组的值
        {
            printf("2 ");
            bl++;
        }
    }
    return 0;
}


 

0.0分

6 人评分

  评论区