發表文章

目前顯示的是 12月, 2019的文章

Zerojudge 基礎題庫a002 簡易加法

圖片
這題簡單,不多做說明。 記得重複測資,詳細請參考基礎題庫a001的範例程式碼。 程式碼: 1 2 3 4 5 6 7 8 9 10 11 12 #include <iostream> using namespace std; int main () { //input two number; int inputA,inputB; while (cin >> inputA >> inputB) { cout << inputA + inputB << endl; } }

Zerojudge 原創/不分類題庫b882 溢位 の OωO學長?

圖片
(一)正文 第一眼看見這道題目,可以好好讚嘆這作者編故事的能力,真的太厲害了,簡直在考閱讀能力嘛......(我討厭國文!!!) 為了使這題好講一點,我把這題目重新述說一遍(不加廢話啦) ----------------------------------------------------------------------------------------- 輸入沒有進位概念的時分秒,請加上進位概念(24小時時制) ----------------------------------------------------------------------------------------- 例如輸入22 132 234,明顯地怎麼可能有234秒這的東西,所以我們就把234秒變成3分加54秒,把多的3分加入132分,變成135分。 沒有135分這東西啊,所以我們把它變成2時15分,並把2時加在22裡,變24時,但題目提示寫到: 提示 : 24小時制中並沒有 24:00:00 ,只有 00:00:00 唷~~~  OωO 所以沒有24時這東西,變成1天0時,當然時鐘不標記日期嘛,所以天就捨棄掉摟~ 所以最後答案是 00:15:54 簡單嘛?噢,對,概念簡單,但這題不會輕易放過你的,一堆陷阱在裡面(我只知道兩個)~ 先別急著往下看,趁著現在,現學現賣,趁熱打鐵,快~ (二)陷阱們 相信你,一定碰到了許多WA,以下我要講我碰到的陷阱,希望對你有所幫助: 1.0 不等於 00,4 不等於 04 當答案有個位數時,就會出現錯誤,格式不對。 怎辦?個位數時在前面加零啊~ 2.我的答案出現奇怪的數字 為何會出現奇怪的數字?因為你的變數裝不下了啊 int 可裝的整數範圍是 2147483647 ~ -2147483648 所以用大一點的變數型態吧 (三)我要程式碼!! 好好好,程式碼程式碼: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 #include <iostream> using namespace st

Zerojudge 基礎題庫a148 You Cannot Pass?!

高中時期,不是所有科目都已80,90分為目標了,能過60,不用補考就是世界上最幸福的事了~ 這題就是,把成績相加除以成績數,是否大於59?有,恭喜,你過了!! 值得注意的是, 大於n包含n 歐,所以59分,過! 還有, 小心有浮點數 。 所以用int,不會過喔。 c++ 程式碼: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #include <iostream> using namespace std; int main (){ int a; double input; double ans; while (cin >> a){ ans = 0 ; for ( int i = 0 ; i < a; i ++ ){ cin >> input; ans = ans + input; } if (ans / a <= 59 ){ cout << "yes" << endl; } else { cout << "no" << endl; } //cout << ans / a << endl; } }

Zerojudge 競賽題庫e523 106 彰雲嘉區複賽 - Q3 費波南希數列

圖片
先來知道一下費氏數列。 1,1,2,3,5,8,13,21,34,55,89,... 你會發現,下一項是由前一項和這一項所相加而成。 所以在解這道題目時,可以 先找出所有 小於1000000的費氏數列中的數 。 提示一下,總共有三十個數。(從1開始) 找到之後,再利用它來一一比對是否為該陣列的數。 c++程式碼: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 #include <iostream> using namespace std; int fib[ 32 ] = { 0 }; void fibb () { fib[ 1 ] = 1 ; fib[ 2 ] = 1 ; for ( int i = 1 ; i > 0 ; i ++ ) { fib[i +2 ] = fib[i] + fib[i +1 ]; //cout << "added" << endl; if (fib[i +2 ] > 1000000 ) { break ; } } } int isFib ( int a){ for ( int i = 1 ;i <=31 ; i ++ ){ if (a == fib[i]){ return i; } } return -1 ; } int main () { fibb(); int times; int question; cin >> times; for ( int i = 0 ; i < times; i ++ ){ cin >> question

Zerojudge 基礎題庫a059 完全平方和

圖片
這題算是還好,設一個平方函數可以增加程式可讀性。 只記得他不是使用while來重複測資,他使用for迴圈 而且格式有使用到for("Case 1~...") 程式碼: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #include <iostream> using namespace std; int make_double ( int num){ return num * num; } int main (){ //the quantity of testing int needTest = 0 ; cin >> needTest; //a~b int a,b; for ( int j = 1 ; j <= needTest; j ++ ){ cin >> a >> b; int ans = 0 ; for ( int i = 0 ; i <= 40 ; i ++ ) { if (make_double(i) >= a && make_double(i) <= b) { ans += make_double(i); //cout << "add" << make_double(i) << endl; } } cout << "Case " << j << ": " << ans << endl; } }

Zerojudge 基礎題庫a147 Print it all

圖片
這題也是一道簡單的題目 "若 n = 0 表示資料結束" 這句話可以忽略。 C++ 程式碼: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 #include <iostream> using namespace std; /* 大於 0、整數、不可以被 7 整除、小於 n n = 1時 1 % 7 != 0? Yes */ bool check_if_okay ( int inputA) { if (inputA % 7 != 0 ) { return true ; } else { return false ; } } int main () { int n; while (cin >> n) { for ( int i = 0 ; i < n; i ++ ) { if (check_if_okay(i) == true ) { cout << i << " " ; } } cout << endl; } }

Zerojudge 基礎題庫a215 明明愛數數

圖片
這題算簡單的,但有一個地方需要注意的: ---------------------------------------------------------------------- 如果從1開始數,數到第幾次時超過0? 答案是1,不是0,因為他是 數後才檢查 是否有超過。 ---------------------------------------------------------------------- 你會覺得,恩,對啊,然後勒? 但你要知道, for迴圈是先檢查再執行程式區塊裡的內容 的。 所以加一個if敘述再用for迴圈吧。 喔,還有,他沒有出一些很爛的題目(像是浮點數阿,blablabla。。。) 所以int,double之類的都可以使用。 超棒(短)程式碼: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include <iostream> using namespace std; /* 1~... max5 1 = 1 1+2 = 3 1+2+3 = 6 */ int getAnswer ( int n, int m){ if (n > m){ return 1 ; } int current = 0 ; int counter = 0 ; for ( int i = n;current <= m;i ++ ){ current += i; counter ++ ; } return counter; } int main (){ int n; int m; while (cin >> n >> m){ cout << getAnswer(n,m) << endl; } }

Zerojudge 基礎題庫a034 二進位制轉換

圖片
十進位轉二進位,現實生活中如何做到? 相信聰明的你,一定想到...... ------------------------------------------------------------------- 假設題目是23: 先找二進位最大的位數 23 >= 1?   Yes 23 >= 2?   Yes 23 >= 4?   Yes 23 >= 8?   Yes 23 >= 16? Yes 23 >= 32? No 所以 最大位數是第5位 。 2^5 = 16, 從十六開始減 23 >= 16? Yes  -> 23-16=7,螢幕上 "1" 7 >= 8?     No   ->                   螢幕上"10" 7 >= 4?     Yes  -> 7-4=3    ,螢幕上"101" 3 >= 2?     Yes  -> 3-2=1    ,螢幕上"1011" 1 >= 1?     Yes  -> 1-1=0    ,螢幕上"10111" 答案:10111 ------------------------------------------------------------------- 看了這個例子,相信應該可以作答了。 加油! 當然這只是其中一種解法 還有很多解法等你去發掘! 當然:程式碼在此: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 #include <ios

Zerojudge 基礎題庫d489 伏林的三角地

圖片
這題在知道海龍公式時非常簡單,但不知道的人真的會燒掉~ 因為他說平方後是整數,不代表沒平方時是整數。 像是 2 和 2^1/2 偏偏float無法表示無理數,所以用普通方法算出面積不是明智之舉。 所以提示只有一個: 海龍公式! s = (a+b+c) / 2 area^2 = s(s-a)(s-b)(s-c) 下面是程式碼: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include<iostream> using namespace std; int tri_area_power2 ( int a, int b, int c){ int s = (a + b + c) /2 ; return s * (s - a) * (s - b) * (s - c); } int main (){ int a,b,c; while (cin >> a >> b >> c){ cout << tri_area_power2(a,b,c) << endl; } }

Zerojudge 基礎題庫a001 哈囉

圖片
基本上,只要記得加重複測資即可 (while(){}) 程式碼: 1 2 3 4 5 6 7 8 #include <iostream> using namespace std; int main (){ string a; while ( cin >> a) cout << "hello, " << a << endl; }

Zerojudge 基礎題庫a022 迴文

圖片
回文的定義是: 正向,反向讀到的字串均相同。 有了這個天大的提示,腦子裡瞬間跳出: 1.把題目顛倒一下 2.判斷是否相等 例如hi,把它顛倒變成ih hi != ih,所以不是回文 那theht,把它顛倒變成theht theht == theht,所以它是回文 有了這個神提示,趕快好好思考吧 那如果還不知道,那就繼續往下看: (一) 如何儲存字串 你可以這樣: char a[1000]; cin >> a; 這樣你輸入hello a[0] a[1] a[2] a[3] a[4] a[5] a[6]   ...    h     e     l      l      o     \0 當然你也可以學學string,功能強大~ (二) 如何知道字串長度 每個字串最後都是\0,好好利用吧 當然,string 有方便的函數 (三) 如何顛倒字串 答案:第二個提示不是寫無聊的 (四) 我要程式碼! 好吧,只能參考喔,不要複製歐~ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 #include <iostream> #include <cstring> using namespace std; int main () { char question[ 1000 ]; while (cin >> question){ //find \0 (put it in length) int length; for ( int i = 0 ; i <= 999 ; i ++ ) { if (question[i] == '\0' ) { length = i; break ;

Zerojudge 基礎題庫a263 日期差幾天

圖片
這題是一個很注重細節的題目 因為曆法裡有一個很討厭的東西:閏年 一開始我本來想用日期減法來算 但最後結果是: 太複雜了。 所以我去網路看有甚麼東西可簡化這題目 當然,找到了,就是這句話: 算出0001/1/1到第一個日期的時間,再算出0001/1/1到第二個日期的時間。 把兩者互減在絕對值,就是答案。 基本上,您看到這,你可以去試試了。 如果還不知道怎辦,一些提示提供給你: 記得考慮閏年 一年除以4可整除而且不可整除100,或是整除400的是閏年 做一個檢查閏年的函數會有很大的幫助喔 如果你覺得月份計算很煩,看看這兩段程式碼 int normal_months[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; int lunar_months[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31}; 好啦,夠多提示啦,如果腦細胞全死光了,這是程式碼: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 #include <iostream> #include <cmath> using namespace std; /* 2019 / 12 / 14 11 : 20 finished oh my god it is so hard */ int normal_months[ 13 ] = { 0 , 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 }; int lunar_months[ 13 ] = { 0 , 31 , 29 , 31 , 30 , 31 , 30