zoukankan      html  css  js  c++  java
  • 进阶实验1-3.1 两个有序序列的中位数 (25分)

     

     解题思路:

    先比较a数组的中位数a[mid]和b数组的中位数b[mid],如果a[mid]=b[mid],则直接输出;否则,

        1)、数组长度为奇数时,

                如果a[mid]>b[mid],则丢掉a[mid](不含a[mid])右边的数,和b[mid](不含b[mid])左边的数

                如果a[mid]<b[mid],则丢掉a[mid](不含a[mid])左边的数,和b[mid](不含b[mid])右边的数

        2)、数组长度为偶数时

                如果a[mid]>b[mid],则丢掉a[mid](不含a[mid])右边的数,和b[mid](含b[mid])左边的数

                如果a[mid]<b[mid],则丢掉a[mid](含a[mid])左边的数,和b[mid](不含b[mid])右边的数

    如此循环,直至两个数组均只剩下一个数,较小者则为所求

    #include <stdio.h>
    int main() {
        int n;
        scanf("%d",&n);
        int a[n],b[n];
        int i;
        for(i=0; i<n; i++) {
            scanf("%d",&a[i]);
        }
        for(i=0; i<n; i++) {
            scanf("%d",&b[i]);
        }
        int i1=0,i2=0,j1=n-1,j2=n-1,mid1=(i1+j1)/2,mid2=(i2+j2)/2;
        while(i1<j1) {
            if(a[mid1]==b[mid2])
                break;
            if((i1+j1+1)%2==0) {
                if(a[mid1]>b[mid2]) {
                    j1=mid1;
                    i2=mid2+1;
                } else if(a[mid1]<b[mid2]) {
                    i1=mid1+1;
                    j2=mid2;
                }
            } else {
                if(a[mid1]>b[mid2]) {
                    j1=mid1;
                    i2=mid2;
                } else if(a[mid1]<b[mid2]) {
                    i1=mid1;
                    j2=mid2;
                }
            }
            mid1=(i1+j1)/2;
            mid2=(i2+j2)/2;
        }
        printf("%d",a[mid1]<b[mid2]?a[mid1]:b[mid2]);
       return 0; }
    勤能补拙,熟能生巧
  • 相关阅读:
    JAVA 高级特性 JDBC
    C3P0 连接池
    JAVA WEB Servlet
    JAVAWEB JSP
    sed 命令
    shell 简单脚本编程
    从首页问答标题到问答详情页
    首页列表显示全部问答,完成问答详情页布局
    制作首页的显示列表
    发布功能完成
  • 原文地址:https://www.cnblogs.com/snzhong/p/12435481.html
Copyright © 2011-2022 走看看