Try   HackMD

TJPC 11th 測機題解

PA - 磚頭

首殺: wonderhoi

全部加起來就好
因為出題者很壞,a+b+c會超出int的範圍,要開long long才夠

#include<bits/stdc++.h> using namespace std; int main(){ long long a , b , c; cin >> a >> b >> c; cout << a + b + c << '\n'; }

PB - 你電到我了

首殺: wonderhoi

因為輸入的人名會含有空白,所以用getline輸入然後照題目輸出即可

#include<bits/stdc++.h> using namespace std; int main(){ string a; getline( cin , a ); cout << "Hello world, " << a << "!" << '\n'; }

PC - 西格瑪

首殺: asdfg1021

題目要你找1~k中沒有出現在A數列裡的數字平方和

先開一個bool陣列判斷從1~k中的數字那些有出現
因為bool沒辦法開到

1018,且題目只求1~k
所以只要紀錄A數列裡<=k的數即可,其他就不用管他了

*因為出題者很壞,14行的i*i會超出int的範圍,在開變數時記得開long long

#include<bits/stdc++.h> using namespace std; bool b[3000010] = {0}; int main(){ long long n , k , a , ans = 0; cin >> n >> k; for( int i = 0 ; i < n ; i++ ){ cin >> a; if( a <= k ) b[a] = 1; } for( long long i = 1 ; i <= k ; i++ ){ if( b[i] == 0 ){ ans += i*i; } } cout << ans << '\n'; }

PD - 王子Dray

首殺: asdfg1021

梗題
思考一下就會發現用最多的質數 = 用到的質數最小
最小的偶數質數是2
最小的奇數質數是3
可以推斷某數A = 2*n + 3 或 2*n
例如:
100 = 2 * 50 、 101 = 2 * 49 + 3 * 1 、 102 = 2 * 51
輸入100輸出50、入101輸出50(49+1)、輸入102輸出51

記得開long long,輸入會到

1018

#include<bits/stdc++.h> using namespace std; int main(){ long long n; cin >> n; cout << n/2 << '\n'; }

PE - 溫度換算

首殺: asdfg1021

照題意變動n與m,然後找n跟m的最大公因數把他們約分
因為n跟m的最大公因數有可能會<0,要記得加一個絕對值給他

#include <bits/stdc++.h> using namespace std; int main() { int a , b; cin >> a >> b; a -= 32*b; a *= 5; b *= 9; int g = abs( __gcd( a , b ) ); cout << a / g << '/' << b / g << '\n'; }
  • UPD by Blame 2024/08/13
    C++內建 __gcd()出來會是負數的,但是gcd()會是正數

BONUS

GPT
#include <iostream> #include <cmath> // for abs function using namespace std; // 辗转相除法计算最大公约数 long long gcd(long long a, long long b) { while (b) { a %= b; swap(a, b); } return a; } int main() { long long N, M; cin >> N >> M; // 计算摄氏温度的分子和分母 long long numerator = 5 * (N - 32 * M); long long denominator = 9 * M; // 化简分数 long long divisor = gcd(abs(numerator), abs(denominator)); numerator /= divisor; denominator /= divisor; // 输出结果 if (denominator == 1) { cout << numerator << "/1" << endl; } else { cout << numerator << "/" << denominator << endl; } return 0; }
Last AC

image