2014-11-21 38 views
0

嗨,這是我的代碼找到三個中間數,但當我給a = 3 b = 2和c = 1我得到錯誤的輸出。我怎麼能找到正確的中間數字?是有數組的任何方式? 謝謝C programm找到中間數

#include<stdio.h> 

int main() 

{ 

    int a,b,c; 

    int min,mid,max,i=1; 

    printf("Enter number: "); 
    scanf("%d",&a); 
    printf("\nEnter number: "); 
    scanf("%d",&b); 
    printf("\nEnter number: "); 
    scanf("%d",&c); 

    if(((a<b)&&(b<c)) || ((a>b)&&(a<c))) 
    { 
     min=a; 
     mid=b; 
     max=c; 
    } 
    if(((b<a)&&(a>c)) || ((a>b)&&(a<c))) 
    { 
     min=c; 
     mid=a; 
     max=b; 
    } 
    if(((c<a)&&(c>b)) || ((c>a)&&(c<b))) 
    { 
     min=b; 
     mid=c; 
     max=a; 
    } 
    printf("\nMid is %d",mid); 



    for(i=min;i<=max;i++) 
    { 


     if(i==mid) 
      continue; 
     printf("\n%d",i); 
    } 

    getchar(); 
    getchar(); 

} 
+3

你的第一條件的第二部分是錯誤的。沒有檢查過別人,你可以自己做。 – 2014-11-21 20:40:44

+0

退後一步。在解析'min','mid'和'max'後,__P打印出來!__。例如,用'3 2 1',你會注意到'min == 3'和'max == 1',這是倒退的。 – 2014-11-21 20:41:46

+0

'人qsort'。這就是你如何使用數組來完成的。 – 2014-11-21 20:48:12

回答

0

爲了使您的生活更輕鬆,編寫一個名爲min功能。它需要兩個整數並返回一個更小的整數。現在使用這樣的功能:

int min = min(min(a,b),c); 

與最大。

爲了得到中期價值,才使這種計算:

int mid = a + b + c - max - min; 
+0

代碼如何?感謝您的回答! – inferno123 2014-11-21 20:54:54

+0

您的意思是最小和最大的代碼?就像那樣:'如果(a 2014-11-21 21:07:55

0

,如果你能找到最大值和最小值,你可以找到的中間值是這樣的:

int a = 1, b = 2, c = 3; 
int minVal = min(a, b); 
int maxVal = max(maxVal, c); 

int midVal = a + b + c - maxVal - minVal; 

midVal應該包含這3個數字的中間值。

+1

謝謝你指出了聰明的計算中。 – 2014-11-21 20:53:08

1

如果你有一個排序的數組:

int nums[N]; 

然後:

  • 對於N連中位數:(nums[N/2] + nums[(N/2)-1])/2

  • n爲奇數的中位數爲:nums[(N-1)/2]

如果陣列是沒有排序,然後檢查使用陣列的Median of Medians

0

排序很簡單:

#include<stdio.h> 
#include<errno.h> 
#include<string.h> 
#include<stdlib.h> 

int compar(const void *a, const void *b) 
{ 
     return *(int*)a > *(int*)b; 
} 

void die(const char *msg) 
{ 
     if(errno) 
       fprintf(stderr, "%s: %s\n", strerror(errno), msg); 
     else 
       fprintf(stderr, "%s\n", msg); 
     exit(EXIT_FAILURE); 
} 

int get_input(void) 
{ 
     int ret; 
     errno = 0; 
     if(scanf("%d", &ret) != 1) 
       die("invalid input"); 
     return ret; 
} 

void * xmalloc(size_t s) 
{ 
     void *ret; 
     ret = malloc(s); 
     if(ret == NULL) 
       die("malloc"); 
     return ret; 
} 

int main(int argc, char **argv) 
{ 
     int *a; 
     int *b; 
     int count; 
     count = get_input(); 
     a = b = xmalloc(count * sizeof *a); 
     while(count-- > 0) 
       *b++ = get_input(); 

     qsort(a, b - a, sizeof *a, compar); 
     printf("sorted:"); 
     while(a != b) 
       printf(" %d", *a++); 
     putchar('\n'); 
     return EXIT_SUCCESS; 
}