#13658: C++參考


snakeneedy (蛇~Snake)

學校 : 國立高雄師範大學附屬高級中學
編號 : 7661
來源 : [114.40.8.251]
最後登入時間 :
2023-01-25 19:16:06
b898. 1. 畢氏定理 -- 2016高雄市資訊學科能力複賽 | From: [1.173.96.251] | 發表日期 : 2018-04-04 01:38

拿了 AC (8ms, 380KB) 不是最佳解,在處理 getchar() 的部份自己電腦和 zoj 的結果不同,嘗試了幾次才弄好。

說是 C++ 其實也幾乎都是 C code

  1. 10 的 100000 次方,不管用哪種基本數字型態都會爆(別的討論頁有提)
  2. 自己用 cin 讀給 string 也是爆了,還沒想到怎麼處理,就換成 getchar() 土法煉鋼
  3. 字串比較上,先比字串長度,再從高位依序比到低位就行了(可以用 strcmp)
#include <cstdio>
#include <cstring>

const unsigned MAXSIZE = 100001;
char strs[3][MAXSIZE];

void input(int index) {
  char ch;
  int len;
  for (len = 0; true; ++len) {
    ch = getchar();
    if (ch < '0' || '9' < ch) {
      if (len == 0) {
        len = -1;
        continue;
      } else {
        strs[index][len] = '\0';
        break;
      }
    }
    strs[index][len] = ch;
  }
}

bool lessThan(char * str1, char * str2) {
  unsigned len1 = strlen(str1), len2 = strlen(str2);
  if (len1 == len2) {
    return strcmp(str1, str2) < 0;
  } else {
    return len1 < len2;
  }
}

int main() {
  int test;
  while (scanf("%d\n", &test) != EOF) {
    while (test--) {
      input(0);
      input(1);
      input(2);

      if (lessThan(strs[0], strs[1])) {
        if (lessThan(strs[2], strs[1])) puts(strs[1]);
        else puts(strs[2]);
      } else {
        if (lessThan(strs[2], strs[0])) puts(strs[0]);
        else puts(strs[2]);
      }

    }
  }
  return 0;
}

 

 
#13659: Re:C++參考


snakeneedy (蛇~Snake)

學校 : 國立高雄師範大學附屬高級中學
編號 : 7661
來源 : [114.40.8.251]
最後登入時間 :
2023-01-25 19:16:06
b898. 1. 畢氏定理 -- 2016高雄市資訊學科能力複賽 | From: [1.173.96.251] | 發表日期 : 2018-04-04 01:44

補充:改成

char str[MAXSIZE];
scanf("%s", str);

就可以讀入長字串了,也就是我的 input() 根本用不到 (眼神死)

 
ZeroJudge Forum