zoukankan      html  css  js  c++  java
  • 中位数求值(分治法)

    输入两段相同长度的正序序列,求出合并后的中位数,例如:

    //input.txt
    2
    5 15
    3 21
    //output.txt
    5
     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 #define MAX_SIZE 1000
     4 int get_mid_num(int a[],int b[],int n); 
     5 // int fgetc(FILE *fp)       从文件中读一个字符
     6 // int fputc(int c,FILE *fp)  向文件写入一个字符 
     7 // char * fgets(char *s,int size,FILE *fp); 从文件中读取若干个字符
     8 // int fputs(const char*str,FILE *fp);      把str(可视为字符数组名)所指向的字符串,输出到fp所指的文件中 
     9 // int fscanf(FILE *fp,str "***%d***",a,b,c) 
    10 //fscanf 与 fputs 的区别:fscanf遇到换行和空格都要结束,而fputs仅仅遇到换行时结束 
    11  
    12  
    13 //  二进制方式
    14 //unsigned fread(void *buf,unsigned size,unsigned count,FILE * fp)  数据块读取(输入)函数fread
    15 //unsigned fwrite(const void *buf,unsignedsize,unsigned count ,FILE *fp)   将buf所指向内存中的count个数据块写入fp指向的文件中。每个数据块大小为size 
    16 int main()
    17 {
    18     FILE *fp;
    19     fp=NULL;
    20     fp=fopen("input.txt","r");
    21     if(fp==NULL)
    22     {
    23         printf("Failed to open file!
    ");
    24         exit(0);
    25     }
    26     int a[MAX_SIZE];
    27     int b[MAX_SIZE];
    28     int n;
    29 //    printf("input n: ");
    30 //    scanf("%d",&n);
    31     fscanf(fp,"%d",&n);
    32 //    printf("input a: ");
    33     for(int i=0;i<n;i++)
    34     {
    35 //        scanf("%d",a+i);
    36         fscanf(fp,"%d",a+i);
    37     }
    38 //    printf("input b: ");
    39     for(int i=0;i<n;i++)
    40     {
    41 //        scanf("%d",b+i);
    42         fscanf(fp,"%d",b+i);
    43     }
    44     fclose(fp);
    45     fp=fopen("output.txt","w");
    46     if(fp==NULL)
    47     {
    48         printf("Failed to open file!
    ");
    49         exit(0);
    50     }
    51 //    printf("%d",get_mid_num(a,b,n));
    52     fprintf(fp,"%d",get_mid_num(a,b,n));
    53     fclose(fp);
    54     return 0;
    55 } 
    56 
    57 get_mid_num(int a[],int b[],int n)
    58 {
    59 //    printf("
    %d",n);
    60     if(a[(n-1)/2]==b[(n-1)/2])
    61     {
    62 //        printf("!!!");
    63         return a[(n-1)/2];
    64     }
    65 
    66     if(n==1)
    67     {
    68 //        printf("n==1!");
    69         if(*a>*b)
    70             return *b;
    71         else
    72             return *a;
    73     }
    74     else
    75     {
    76         if(a[(n-1)/2]>b[(n-1)/2])
    77         {
    78 //            printf("mid of a is %d	",a[(n-1)/2]);
    79 //            printf("mid of b is %d	",b[(n-1)/2]);
    80             get_mid_num(&a[0],&b[n-(n+1)/2],(n+1)/2);
    81         }
    82         else
    83         {
    84 //            printf("mid of a is %d	",a[(n-1)/2]);
    85 //            printf("mid of b is %d	",b[(n-1)/2]);
    86             get_mid_num(&a[n-(n+1)/2],&b[0],(n+1)/2);
    87         }
    88     }
    89 }
  • 相关阅读:
    html/form表单常用属性认识
    css复杂动画(animation属性)
    css样式水平居中和垂直居中的方法
    css简单动画(transition属性)
    html/css中map和area的应用
    html/css弹性布局的几大常用属性详解
    webpack优化配置
    webpack配置详解
    使用Node.js搭建一个简单的web服务器(二):搭建一个简单的服务器
    使用Node.js搭建一个简单的web服务器(一):Node.js入门
  • 原文地址:https://www.cnblogs.com/sgawscd/p/10501060.html
Copyright © 2011-2022 走看看