## 弱鸡的第二次线上赛总结(TKK18no.4)
第一題:十六進制
輸入一個十進制正整數,輸出這個數的十六進制表示,其中十六進制的10-15用大寫字母A-F表示。
不斷取余,將10-15的數替換成相應大寫字母即可。
#include<iostream> #include<string> #include<cmath> #include<bitset> #include<algorithm> using namespace std; void D_TO_X(int x) {int i, j, arr[16];for (i = 0; x != 0; i++){arr[i] = x % 16;if (arr[i] <= 9){arr[i] += '0'; }else{switch (arr[i]){case 10:arr[i] = 'A'; break;case 11:arr[i] = 'B'; break;case 12:arr[i] = 'C'; break;case 13:arr[i] = 'D'; break;case 14:arr[i] = 'E'; break;case 15:arr[i] = 'F'; break;}}x /= 16;}for (j = i - 1; j >= 0; j--){cout.put(arr[j]);}cout << endl; }int main() {int n;cin >> n;while (n--){int k;cin >> k;D_TO_X(k);}return 0; }第二題:畫矩形
只有一組案例。先是兩個正整數m和n(3<=m,n<=10),然后是一個字符c,最后是一個0或者1的整數d。m代表矩形圖案的高,n代表矩形圖案的寬,c是用來畫矩形的符號,如果d是0則畫空心的矩形,如果d是1則畫實心的矩形。
比較基礎,換成1與0兩種情況,逐行判斷輸出即可。
#include<iostream> #include<string> #include<cmath> #include<bitset> #include<algorithm> using namespace std;int main() {int m, n;char k;bool x;cin >> m >> n >> k >> x;if (x){for (int i = 0; i < m; i++){for (int i = 0; i < n; i++){cout << k;}cout << endl;}}else{for (int i = 0; i < m; i++){if (i == 0 || i == m - 1){for (int i = 0; i < n; i++){cout << k;}cout << endl;}else{cout << k;for (int i = 0; i < n-2; i++){cout << " ";}cout << k << endl;}}}return 0; }第三題:從前有個函數
從前有個數學函數f(x),功能是計算x的因數的個數,例如f(8)=4。(因為8的因數有1、2、4、8)后來有人覺得算一次f函數不過癮,又嵌套了一層,于是變成了f(f(x)),那么f(f(8))=f(4)=3。隨后,就有了更多層的嵌套函數f。人們發現這樣寫太費事了,于是把嵌套層數當成了f函數的第二個參數,例如f(f(8))寫成了f(8,2),f(9)寫成了f(9,1)。現在,需要計算f(a,b)=?
這里題目輸入的是十億以內的數,可見要節約時間。于是判素后直接取2,在sqrt下*2,完全平方數再加一。
#include<iostream> #include<algorithm> #include<cmath> #include<bitset> #include<string> using namespace std; bool f(int m) {for (int i = 2; i <= sqrt(m); i++){if (m%i == 0)return 0;}if (m>1)return 1;else return 0; }int main() {int n, m, p;cin >> n;while (n--){cin >> m >> p;while (p--){if (f(m)){m = 2; break;}if (m == 1)break;int sum = 0;for (int i = 1; i <= sqrt(m); i++){if (i*i == m)sum++;else if (m%i == 0)sum += 2;}m = sum;}cout << m << endl;} }第四題:五毒教主吃蘋果
有一天,邪惡的巫師送給了五毒教主一筐蘋果,里面有一些正常的蘋果和一些有毒的蘋果。凡人吃毒蘋果輕則吐血,重則暴斃,然而五毒教主吃一個毒蘋果后只會昏睡一天,并無大礙。昏睡的那天五,毒教主不吃蘋果。例如,第1天吃了一個毒蘋果,則第2天昏睡不吃,第3天繼續吃。
恰逢五毒教主最近減肥,每天最多只吃1個蘋果,直到吃完這一筐蘋果為止。
問:有多少種不同的吃法?(如果有一個正常的蘋果和一個毒蘋果,那么先吃正常蘋果再吃毒蘋果,和先吃毒蘋果再吃正常蘋果,屬于2種不同的吃法。)
看起來很嚇人,實際上就是遞歸。普通的蘋果和毒蘋果就是兩種東西,日期無所謂。
#include<iostream> #include<string> #include<cmath> #include<bitset> #include<algorithm> using namespace std; int t(int a, int b) {if (a == 0 && b == 0)return 1;else if (b == 0)return 1;else if (a == 0)return 1;else return t(a - 1, b) + t(a, b - 1); } int main() {int f;cin >> f;while (f--){int m, n;cin >> m >> n;cout << t(m, n) << endl;}return 0; }第五題:算出18
有3個非負的整數,想看看是否能夠通過加減乘除運算,使得答案為18。
每個數字必須都用上,且僅能各使用一次。不要求按照順序使用,可以添加上適當的括號以改變計算順序。
注意:除法是按照數學上的運算結果。
這道題有兩種做法,一種是暴力,一種還是遞歸。要考慮到0的情況和是否用到所有數,是否有浮點數誤差,還有數的順序可以替換問題。
#include<iostream> #include<string> #include<cmath> #include<bitset> #include<algorithm> using namespace std;int main() {int f;cin >> f;while (f--){double x1, x2, x3;cin >> x1 >> x2 >> x3;double a = x1; double b = x2; double c = x3;int d = 0;if (a + b + c == 18)d = 1;else if (a + b - c == 18)d = 1;else if (a + b * c == 18)d = 1;else if (c!=0&&a + b / c == 18)d = 1;else if ((a + b) * c == 18)d = 1;else if (c != 0 && (a + b) / c == 18)d = 1;else if (a - b + c == 18)d = 1;else if (a - b - c == 18)d = 1;else if (a - b * c == 18)d = 1;else if (c != 0 && a - b / c == 18)d = 1;else if ((a - b) * c == 18)d = 1;else if (c != 0 && (a - b) / c == 18)d = 1;else if (a * b + c == 18)d = 1;else if (a * b - c == 18)d = 1;else if (a * b * c == 18)d = 1;else if (c != 0 && a * b / c == 18)d = 1;else if (a * (b + c) == 18)d = 1;else if (a * (b - c) == 18)d = 1;else if (a / b + c == 18)d = 1;else if (a / b - c == 18)d = 1;else if (a / b * c == 18)d = 1;else if (c != 0 &&b!=0&& a / b / c == 18)d = 1;else if (b+c!=0&&a / (b + c) == 18)d = 1;else if (b-c!=0&&a / (b - c) == 18)d = 1;a = x2; b = x1; c = x3;if (a + b + c == 18)d = 1;else if (a + b - c == 18)d = 1;else if (a + b * c == 18)d = 1;else if (c != 0 && a + b / c == 18)d = 1;else if ((a + b) * c == 18)d = 1;else if (c != 0 && (a + b) / c == 18)d = 1;else if (a - b + c == 18)d = 1;else if (a - b - c == 18)d = 1;else if (a - b * c == 18)d = 1;else if (c != 0 && a - b / c == 18)d = 1;else if ((a - b) * c == 18)d = 1;else if (c != 0 && (a - b) / c == 18)d = 1;else if (a * b + c == 18)d = 1;else if (a * b - c == 18)d = 1;else if (a * b * c == 18)d = 1;else if (c != 0 && a * b / c == 18)d = 1;else if (a * (b + c) == 18)d = 1;else if (a * (b - c) == 18)d = 1;else if (a / b + c == 18)d = 1;else if (a / b - c == 18)d = 1;else if (a / b * c == 18)d = 1;else if (c != 0 && b != 0 && a / b / c == 18)d = 1;else if (b + c != 0 && a / (b + c) == 18)d = 1;else if (b - c != 0 && a / (b - c) == 18)d = 1;a = x1; b = x3; c = x2;if (a + b + c == 18)d = 1;else if (a + b - c == 18)d = 1;else if (a + b * c == 18)d = 1;else if (c != 0 && a + b / c == 18)d = 1;else if ((a + b) * c == 18)d = 1;else if (c != 0 && (a + b) / c == 18)d = 1;else if (a - b + c == 18)d = 1;else if (a - b - c == 18)d = 1;else if (a - b * c == 18)d = 1;else if (c != 0 && a - b / c == 18)d = 1;else if ((a - b) * c == 18)d = 1;else if (c != 0 && (a - b) / c == 18)d = 1;else if (a * b + c == 18)d = 1;else if (a * b - c == 18)d = 1;else if (a * b * c == 18)d = 1;else if (c != 0 && a * b / c == 18)d = 1;else if (a * (b + c) == 18)d = 1;else if (a * (b - c) == 18)d = 1;else if (a / b + c == 18)d = 1;else if (a / b - c == 18)d = 1;else if (a / b * c == 18)d = 1;else if (c != 0 && b != 0 && a / b / c == 18)d = 1;else if (b + c != 0 && a / (b + c) == 18)d = 1;else if (b - c != 0 && a / (b - c) == 18)d = 1;a = x2; b = x3; c = x1;if (a + b + c == 18)d = 1;else if (a + b - c == 18)d = 1;else if (a + b * c == 18)d = 1;else if (c != 0 && a + b / c == 18)d = 1;else if ((a + b) * c == 18)d = 1;else if (c != 0 && (a + b) / c == 18)d = 1;else if (a - b + c == 18)d = 1;else if (a - b - c == 18)d = 1;else if (a - b * c == 18)d = 1;else if (c != 0 && a - b / c == 18)d = 1;else if ((a - b) * c == 18)d = 1;else if (c != 0 && (a - b) / c == 18)d = 1;else if (a * b + c == 18)d = 1;else if (a * b - c == 18)d = 1;else if (a * b * c == 18)d = 1;else if (c != 0 && a * b / c == 18)d = 1;else if (a * (b + c) == 18)d = 1;else if (a * (b - c) == 18)d = 1;else if (a / b + c == 18)d = 1;else if (a / b - c == 18)d = 1;else if (a / b * c == 18)d = 1;else if (c != 0 && b != 0 && a / b / c == 18)d = 1;else if (b + c != 0 && a / (b + c) == 18)d = 1;else if (b - c != 0 && a / (b - c) == 18)d = 1;a = x3; b = x1; c = x2;if (a + b + c == 18)d = 1;else if (a + b - c == 18)d = 1;else if (a + b * c == 18)d = 1;else if (c != 0 && a + b / c == 18)d = 1;else if ((a + b) * c == 18)d = 1;else if (c != 0 && (a + b) / c == 18)d = 1;else if (a - b + c == 18)d = 1;else if (a - b - c == 18)d = 1;else if (a - b * c == 18)d = 1;else if (c != 0 && a - b / c == 18)d = 1;else if ((a - b) * c == 18)d = 1;else if (c != 0 && (a - b) / c == 18)d = 1;else if (a * b + c == 18)d = 1;else if (a * b - c == 18)d = 1;else if (a * b * c == 18)d = 1;else if (c != 0 && a * b / c == 18)d = 1;else if (a * (b + c) == 18)d = 1;else if (a * (b - c) == 18)d = 1;else if (a / b + c == 18)d = 1;else if (a / b - c == 18)d = 1;else if (a / b * c == 18)d = 1;else if (c != 0 && b != 0 && a / b / c == 18)d = 1;else if (b + c != 0 && a / (b + c) == 18)d = 1;else if (b - c != 0 && a / (b - c) == 18)d = 1;a = x3; b = x2; c = x1;if (a + b + c == 18)d = 1;else if (a + b - c == 18)d = 1;else if (a + b * c == 18)d = 1;else if (c != 0 && a + b / c == 18)d = 1;else if ((a + b) * c == 18)d = 1;else if (c != 0 && (a + b) / c == 18)d = 1;else if (a - b + c == 18)d = 1;else if (a - b - c == 18)d = 1;else if (a - b * c == 18)d = 1;else if (c != 0 && a - b / c == 18)d = 1;else if ((a - b) * c == 18)d = 1;else if (c != 0 && (a - b) / c == 18)d = 1;else if (a * b + c == 18)d = 1;else if (a * b - c == 18)d = 1;else if (a * b * c == 18)d = 1;else if (c != 0 && a * b / c == 18)d = 1;else if (a * (b + c) == 18)d = 1;else if (a * (b - c) == 18)d = 1;else if (a / b + c == 18)d = 1;else if (a / b - c == 18)d = 1;else if (a / b * c == 18)d = 1;else if (c != 0 && b != 0 && a / b / c == 18)d = 1;else if (b + c != 0 && a / (b + c) == 18)d = 1;else if (b - c != 0 && a / (b - c) == 18)d = 1;if (d == 1)cout << "Yes";else cout << "No";cout << endl;}return 0; }這是我的第一種做法,很蠢但至少過了。
#include<iostream> #include<cmath> using namespace std; bool isSame(double a, double b) {if (abs(a - b) <= 1e-7){return true;}else{return false;} } bool can2(double result, int first, int second) {if (first + second == result|| first - second == result|| second - first == result|| first * second == result|| second != 0 && isSame(1.0 * first / second, result)|| first != 0 && isSame(1.0 * second / first, result)){return true;}else{return false;} } bool can31(double result, int first, int second, int third) {if (can2(result - first, second, third)|| can2(first - result, second, third)|| can2(result + first, second, third)|| (result == 0 && first == 0 || first != 0) && can2(result*first, second, third)|| first != 0 && can2(result / first, second, third)|| result != 0 && first != 0 && can2(first / result, second, third)){return true;}else{return false;} } bool can3(double result, int first, int second, int third) {if (can31(result, first, second, third)|| can31(result, second, first, third)|| can31(result, third, first, second)){return true;}else{return false;} } int main() {const double result = 18;int n;cin >> n;while (n--){int a, b, c;cin >> a >> b >> c;if (can3(result, a, b, c)){cout << "Yes" << endl;}else{cout << "No" << endl;}}return 0; }這是遞歸的做法,比較高難。
第六題:字符陣列
輸出m行m列由字符組成的陣列。其特點是按照字母表順序蛇形走位,第一行是順序,第二行是倒序,…。另外,當用到字符Z后,下一個字符是A。
舉個栗子,就是3的話,會變成
ABC
FED
GHI
這個按坐標算出來在自己所在的字符串第幾個,再輸出ascii對應的字母就行。
總結
以上是生活随笔為你收集整理的## 弱鸡的第二次线上赛总结(TKK18no.4)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java 双击按键_java鼠标各按键单
- 下一篇: 建立功能模型的步骤