發表文章

神奇的數字--365

閏年不算的話,一年有365天,那365有什麼特別之處? 首先 \( 365 = 100 + 121 + 144 = 10^2 + 11^2 + 12^2 \) 並且 \( 365 = 169 +  196 = 13^2 + 14^2 \) 那麼 \( \large \frac{10^2 + 11^2 + 12^2 + 13^2 + 14^2}{365} = ? \) 答案為 2 。 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

高中生程式解題系統:明明愛明明

題目連結 http://zerojudge.tw/ShowProblem?problemid=a224 。 演算法: 算出不分大小寫的26各英文字母(a-z)各自出現的次數 letterCnt[ 26 ] 。 算出字母各自出現的次數 letterCnt[ 26 ] 為奇數的有幾個 oddCnt 。 若 oddCnt 大於1,則無法重新排列成回文。 程式碼: # include <cmath> # include <cstdio> # include <cstring> using namespace std ; int main ( void ) { char str[ 1000 ]; while ( scanf ( "%s" , &str) != EOF) { char letterCnt[ 26 ] = { 0 }; bool isPal = true ; int oddCnt = 0 ; int len = strlen (str); for ( int i = 0 ; i < len; i++) { char c = str[i]; if (c >= 'A' && c <= 'Z' ) { letterCnt[c - 'A' ] += 1 ; } else if (c >= 'a' && c <= 'z' ) { letterCnt[c - 'a' ] += 1 ; } } for ( int i = 0 ; i < 26 ; i++) { if (letterCnt[i] % 2 == 1 ) { oddCnt++; } if (oddCnt >= 2 ) { isPal = false ; break ; } //printf("%d\t", l...

高中生程式解題系統:明明愛排列

題目連結 http://zerojudge.tw/ShowProblem?problemid=a225 。 此題修改 C語言qsort 的比較函數 compare ,或是 C++語言sort 的比較函數 comp 即可。 程式碼: # include <cstdlib> # include <cstdio> using namespace std ; int compare ( const void *a, const void *b) { int c = *( int *)a; int d = *( int *)b; if (c % 10 < d % 10 ) { return -1 ;} else if (c % 10 > d % 10 ) { return 1 ;} else return c < d; } int main ( void ) { int num = 0 ; while ( scanf ( "%d" , &num) != EOF) { int data[num]; for ( int i = 0 ; i < num; i++) scanf ( "%d" , &data[i]); qsort(data, num, sizeof ( int ), compare); for ( int i = 0 ; i < num; i++) printf ( "%d " , data[i]); printf ( "\n" ); } return 0 ; } 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

高中生程式解題系統:括號匹配問題 Balanced Parentheses

題目連結 http://zerojudge.tw/ShowProblem?problemid=a229 。 這題用 Depth-first search (DFS) 的觀念來解。 程式碼一: # include <stdio.h> int n; void DFS ( int index, int r, int l, char *s) { if (l == n) { puts (s -2 *n); return ; } if (r < n) *s = '(' , DFS(index+ 1 , r+ 1 , l, s+ 1 ); if (r > l) *s = ')' , DFS(index+ 1 , r, l+ 1 , s+ 1 ); } main() { char s[ 100 ]; while ( scanf ( "%d" , &n) == 1 ) s[ 2 *n] = '\0' , DFS( 0 , 0 , 0 , s), puts ( "" ); return 0 ; } 程式碼二: # include <cstdio> # include <iostream> using namespace std ; void prtPattern ( int index, int right, int left, char *pattern) { if (index == right && left == index) { puts (pattern - 2 * index); } if ( right < index ) { *pattern = '(' ; prtPattern(index, right + 1 , left, pattern + 1 ); } if ( left < right) { *pattern = ')' ; p...

高中生程式解題系統:數數愛明明

題目連結 http://zerojudge.tw/ShowProblem?problemid=a216 。 此題用題目給的公式: f(n) = n + f(n-1) g(n) = f(n) + g(n-1) 來導出公式即可,例如 f(n) 的公式為: f(n) = n * (n + 1 ) / 2 ; 請試試看 g(n) 如何導出公式。 程式碼: # include <cmath> # include <cstdio> using namespace std ; int main ( void ) { long long fn, gn; int n; while ( scanf ( "%d" , &n) != EOF) { fn = n * (n + 1 ) / 2 ; gn = 0 ; for ( int i = 1 ; i <= n; i++) { gn += ((i * (i + 1 )) / 2 ); } printf ( "%llu %llu\n" , fn, gn); } return 0 ; } 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

高中生程式解題系統:a003: 兩光法師占卜術

題目連結 https://zerojudge.tw/ShowProblem?problemid=a003 。 此題是練習餘數運算,底下用C、C++、Python、Java做練習。 C程式碼: # include <stdio.h> int main () { char *msg[] = { "普通" , "吉" , "大吉" }; int m; while ( scanf ( "%d" , &m) != EOF) { int d; scanf ( "%d" , &d); m = (m* 2 +d) % 3 ; printf ( "%s\n" , msg[m]); } return 0 ; } C++程式碼: # include <iostream> using namespace std ; int main () { char *msg[] = { "普通" , "吉" , "大吉" }; short m; while ( cin >> m){ short d; cin >> d; m = (m* 2 +d) % 3 ; cout << msg[m] << endl ; } return 0 ; } Python程式碼: import sys msg = [ "普通" , "吉" , "大吉" ] for line in sys.stdin: [m, d] = line.split() m = int(m) d = int(d) m = (m* 2 +d) % 3 print(msg[m]) Java程式碼: import java.util.Scanner; public clas...

高中生程式解題系統:a002: 簡易加法

題目連結 https://zerojudge.tw/ShowProblem?problemid=a002 。 此題是練習整數的加法運算,底下用C++、Python做練習。 C++程式碼: # include <iostream> using namespace std ; int main () { int a; while ( cin >> a){ int b; b = a; cin >> a; b += a; cout << b << endl ; } return 0 ; } Python程式碼: import sys for s in sys.stdin: num = list(map(int,s.split())) print(num[ 0 ]+num[ 1 ]) 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。