iT邦幫忙

0

struct

  • 分享至 

  • xImage

設計一程式(限使用 struct,否則不計分),並允許使用者輸入學生英文名與成
績(需檢查成績的合理性,剔除不合理資料)。此一程式將在使用者輸入完成
後,依成績遞減順序輸出學生姓名與成績。若成績相同,則按英文名(字母順
序)遞增順序輸出。輸出入格式如範例。

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
海綿寶寶
iT邦大神 1 級 ‧ 2021-06-27 13:40:58
最佳解答
#include <stdio.h>
#include <math.h>

typedef struct{
    int start;
    int end;
} Interval;

#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define MAXN 10

void printInterval(Interval one);
_Bool isOverlap(Interval first, Interval second);

int main()
{
    _Bool checked[10] = {0};
    Interval Itvl[10];
    int N;
    
    scanf("%d\n", &N);
    
    for (int i=0;i<N;i++) {
        scanf("%d %d\n", &Itvl[i].start, &Itvl[i].end);
    }
    
    for (int i=0; i<N; i++) {
        for (int j=i+1; j<N; j++) {
            if (Itvl[i].start>Itvl[j].start) {
                Interval temp;
                temp = Itvl[i];
                Itvl[i] = Itvl[j];
                Itvl[j] = temp;
            }
        }
    }
    
    for (int i=0; i<N; i++) {
        if (!checked[i]) {
            printInterval(Itvl[i]);
            for (int j=i+1; j<N; j++) {
                if (isOverlap(Itvl[i], Itvl[j])) {
                    printInterval(Itvl[j]);
                    checked[j] = 1;
                }
            }
            printf("\n");
        }
    }

    return 0;
}

void printInterval(Interval one) {
    printf("[%d,%d] ", one.start, one.end);
}

_Bool isOverlap(Interval first, Interval second) {
    _Bool bRet = 0;
    if (max(first.start, second.start) <= min(first.end, second.end)) {
        bRet = 1;
    } else {
        bRet = 0;
    }
    return bRet;
}
3
小魚
iT邦大師 1 級 ‧ 2021-06-26 22:49:27

這題我收5千就好.

我要發表回答

立即登入回答