promotion image of download ymail app
Promoted
asked in 電腦與網際網路程式設計 · 1 decade ago

急問請求高手 C語言 中間數問題(贈送20點)

中間數(median)就是在一連串已由小到大排序的數字中,排在中間的那一個數,萬一有偶數個數字,我們定義中間數就是位於中間的那2個數的和除以2(而且只取整數部份),例如:輸入整數串為1、3、4,則輸入3;輸入整數串為1、3、4、7,則輸入3.5。設計一程式輸入整數N( 0<N<100 ),輸出到現在為止已輸入的數的中間數。 (請問怎麼把程式寫出來,可以把過程 和程式打出來)

4 Answers

Rating
  • Favorite Answer

    #include <stdio.h>

    #include <stdlib.h>

    int find_one(int count[], int total)

    {

    int sum=0, i;

    for (i=1; i < 100; i++)

    {

    sum +=count[i];

    if (sum >= total)

    return i;

    }

    return 0;

    }

    float find_two(int count[], int total)

    {

    int sum = 0, i, j;

    int p1=0, p2; //零是不可能當flag用

    for (i=1; i < 100; i++)

    {

    sum +=count[i];

    if (sum > total) //兩個都同值

    return (float)i;

    else if (sum==total) //

    {

    p1=i;

    break;

    }

    }

    for (j=i+1; j < 100; j++)

    {

    if (count[j] > 0)

    {

    p2=j;

    break;

    }

    }

    return (p1+p2)/(float)2;

    }

    int main()

    {

    int size=0, num;

    int cnt[100]={0}; //簡單起見cnt[0]不用,計錄目前各各值的數目

    while (1)

    {

    scanf("%d", &num);

    if (num < 1 || num > 99)

    break;

    cnt[num]++;

    size++;

    if (size & 1)

    //奇數個

    printf("median = %d\n", find_one(cnt, (size+1)/2 ) );

    else

    printf("median = %f\n", find_two(cnt, size/2 ) );

    }

    system("pause");

    return 0;

    }

    • Commenter avatarLogin to reply the answers
  • 1 decade ago

    這是LCM的題目..

    因為我前一陣子也解過這一題..

    你也在練習解嗎??

    加油..

    因為我是用c語言寫得啊..

    所以我說一下..

    中間數那個變數要設float..

    如果你願意..設double也行..

    不管你是否事先宣告..

    還是到後面用轉型的方式..

    不然是無法印出小數點的..

    我覺得我是在說廢話..

    不過當初因為我習慣設整數..

    所以一直印不出小數..

    • Commenter avatarLogin to reply the answers
  • 1 decade ago

    有預先設定要輸入幾個數?

    • Commenter avatarLogin to reply the answers
  • 鴨子
    Lv 6
    1 decade ago

    "我們定義中間數就是位於中間的那2個數的和除以2(而且只取整數部份)"

    那為什麼舉例時, "輸入整數串為1、3、4、7,則輸出3.5" 有取小數部份呢???

    • Commenter avatarLogin to reply the answers
Still have questions? Get your answers by asking now.