#11311: Re:第二測資點錯誤 求哪裡可再簡化?


lucky020372 (AL)

學校 : 不指定學校
編號 : 58906
來源 : [111.242.65.154]
最後登入時間 :
2017-01-21 15:03:02
d985. Gran Turismo 5 -- 學姊 | From: [111.242.57.89] | 發表日期 : 2016-08-28 14:31

有點硬幹

想知道其他方法

#include <stdio.h>
int main(void) {
  int N, n, M, m, a[M], b[M], k[M], sum, temp=0, temp1=0, temp2=0, p;
  int Bm, Bs, A;
  scanf("%d", &N);
  for (n=1; n<=N; n++) {
    scanf("%d", &M);
    for (m=0, sum=0; m<M; m++) {
      scanf("%d %d", &a[m], &b[m]);
      k[m]=60*a[m]+b[m];
      sum+=k[m];
    }
    A=sum/M;
    for (p=2; p<=M; p++) {
      if (k[M-1]>k[M-p]) {
        temp=k[M-p];
        k[M-p]=k[M-1];
        k[M-1]=temp;
        temp1=a[M-p];
        a[M-p]=a[M-1];
        a[M-1]=temp1;
        temp2=b[M-p];
        b[M-p]=b[M-1];
        b[M-1]=temp2;
      } 
    } 
    Bm=a[M-1];
    Bs=b[M-1];
    printf("Track %d:", n);
    printf("\n");
    printf("Best Lap: %d minute(s) %d second(s).", Bm, Bs);
    printf("\n");
    printf("Average: %d minute(s) %d second(s).", A/60, A%60);
   printf("\n");
  }
  return 0;
}

 

 
#11316: Re:Re:第二測資點錯誤 求哪裡可再簡化?


who_am_I (kruztw)

學校 : 國立臺灣師範大學
編號 : 54056
來源 : [36.224.144.147]
最後登入時間 :
2023-04-22 22:46:31
d985. Gran Turismo 5 -- 學姊 | From: [61.223.170.84] | 發表日期 : 2016-08-30 23:13

有點硬幹

想知道其他方法

#include
int main(void) {
  int N, n, M, m, a[M], b[M], k[M], sum, temp=0, temp1=0, temp2=0, p;
  int Bm, Bs, A;
  scanf("%d", &N);
  for (n=1; n<=N; n++) {
    scanf("%d", &M);
    for (m=0, sum=0; m<M; m++) {
      scanf("%d %d", &a[m], &b[m]);
      k[m]=60*a[m]+b[m];
      sum+=k[m];
    }
    A=sum/M;
    for (p=2; p<=M; p++) {
      if (k[M-1]>k[M-p]) {
        temp=k[M-p];
        k[M-p]=k[M-1];
        k[M-1]=temp;
        temp1=a[M-p];
        a[M-p]=a[M-1];
        a[M-1]=temp1;
        temp2=b[M-p];
        b[M-p]=b[M-1];
        b[M-1]=temp2;
      } 
    } 
    Bm=a[M-1];
    Bs=b[M-1];
    printf("Track %d:", n);
    printf("\n");
    printf("Best Lap: %d minute(s) %d second(s).", Bm, Bs);
    printf("\n");
    printf("Average: %d minute(s) %d second(s).", A/60, A%60);
   printf("\n");
  }
  return 0;
}

 

我剛剛看了你的code 覺得有點多此一舉(先說,我沒有測試)

你的 a array 是 分 b array 是秒  k array 是總秒數 對吧?

你既然都換成秒了 ,為什麼還要找最小分(Bm)和最小秒(Bs)   (此處最小是最佳意思,我知道秒不一定是最小的)

直接找最小總秒不就好了,接著再  /60  %60 不就是Bm 和 Bs 了嗎?

 

此外,你可以考慮用 min 和 sec 來代替陣列,這樣好處是減少資料容量,壞處是不能保留原始資料,這點你自己斟酌。

 
ZeroJudge Forum