【解题思路】
① 明确何时该取第一个数组的值,何时该取第二个数组的值,总结出判断条件;
② 明确结束条件,通过循环处理至结束。
【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分
8 人评分
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:333 |
C语言程序设计教程(第三版)课后习题6.5 (Java代码)浏览:1251 |
模拟计算器 (C语言代码)浏览:966 |
2003年秋浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:729 |
震宇大神的杀毒软件 (C++代码)浏览:1173 |
哥德巴赫曾猜测 (C语言代码)浏览:1148 |
不容易系列2 (C语言代码)浏览:641 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:563 |
淘淘的名单 (C语言代码)答案错误???浏览:624 |
【偶数求和】 (C语言代码)浏览:674 |