首页 > 试题广场 >

合并区间

[编程题]合并区间
  • 热度指数:4935 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
用x,y表示一个整数范围区间,现在输入一组这样的范围区间(用空格隔开),请输出这些区间的合并。

输入描述:
一行整数,多个区间用空格隔开。区间的逗号是英文字符。


输出描述:
合并后的区间,用过空格隔开,行末无空格
示例1

输入

1,3 2,5

输出

1,5
示例2

输入

1,3 2,5 8,10 11,15

输出

1,5 8,10 11,15

备注:
x,y均为正整数,并且x<=y。
#include <stdbool.h>
#include <stdio.h>

int len = 0;

void sort(int n[]){
    for(int i = 0; n[i] > 0; i = i + 2){
        for(int j = i + 2; n[j] > 0; j = j + 2){
            if(n[i] > n[j]){
                int temp = n[i];
                n[i] = n[j];
                n[j] = temp;
                temp = n[i + 1];
                n[i + 1] = n[j + 1];
                n[j + 1] = temp;
            }
        }
    }
}

int check(int b, int c, int d){
    if(b >= c){
        if(b > d)
            return b;
        else
            return d;
    }else
        return 0;
}

int main() {
    int n[1000] = {0}, res[1000] = {0}, r = 1;
    char c = '\0';
    while(scanf("%d", &n[len]) != EOF){
        c=getchar();       
        len++;
    }
    sort(n);
    res[0] = n[0];
    res[1] = n[1];    
        for(int j = 2; j < len; j = j + 2){
            int flag = check(res[r], n[j], n[j + 1]);
            if(flag){
                res[r] = flag;
            }else {
                res[++r] = n[j];
                res[++r] = n[j + 1];
            }
        }    
    for(int j = 0; j <= r; j++){
        printf("%d", res[j]);
        if(j % 2){
            printf(" ");
        }
        else {
            printf(",");
        }
    }
    return 0;
}
发表于 2023-02-19 14:49:49 回复(0)