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

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

題目連結 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 = ')';
  prtPattern(index, right, left + 1, pattern + 1);
 }
}

int main() {
 int n;
    while(scanf("%d", &n) != EOF)
 {
  char str[32] = {'\0'};
  prtPattern(n,  0, 0, str);
 }
    return 0;
}

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

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

題目連結 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 class JAVA {
 public static void main(String[] args) {
  Scanner cin = new Scanner(System.in);
     String msg[] = {"普通", "吉", "大吉"};
     int m;
  while (cin.hasNext()) {
      m = cin.nextInt();
   int d;  
   d = cin.nextInt();
   m = (m*2+d) % 3;
   System.out.println(msg[m]);
  }
 }
}

高中生程式解題系統: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])

高中生程式解題系統:a001: 哈囉

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

題目連結 https://zerojudge.tw/ShowProblem?problemid=a001

此題是練習輸入與輸出,底下用C、C++、Python、Java做練習。


C程式碼:
#include<stdio.h>
int main() {
 char s[9999];
while( scanf("%s",s)!=EOF ) {
 printf("hello, %s\n",s);
 }
 return 0;
}

C++程式碼:
#include <iostream>
using namespace std;

int main() {
    string s;
    while(cin >> s){
        cout << "Hello "<< s << endl;
    }
    return 0;
}

Python程式碼:
import sys
for s in sys.stdin:
    print('hello, '+s)

Java程式碼:
import java.util.Scanner;
public class JAVA {
 public static void main(String[] args) {
  Scanner cin = new Scanner(System.in);
  String s;
  while (cin.hasNext()) {
   s=cin.nextLine();
   System.out.println("Hello " + s);
  }
 }
}

高中生程式解題系統:乘乘樂

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

題目連結 http://zerojudge.tw/ShowProblem?problemid=a149

此題用餘數與整數除法即可解出。

程式碼:
#include <cmath>
#include <cstdio>

using namespace std;

int main(void){
 int num = 0;
 int n = 0;
 long result = 1;

    while(scanf("%d", &num) != EOF)
    {
  for(int i = 1; i <= num; i++)
  {
   result = 1;
   scanf("%d", &n);
   
   while(n / 10 > 0)
   {
    int r = n % 10;
    result *= r;
    n = n / 10;
   }
   
   result *= n;
   printf("%ld\n", result);
  }
  
    }

    return 0;
}

Console-based or GUI-based game programming

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

先講題外話

敝人在初學程式設計時,電腦上已經是Windows 95系統了,也不懂什麼是作業系統(OS)。當時的敝人只是電腦的初學者,只會用電腦打打報告,上網聊天等。所幸找到The Java™ Tutorials,從Lesson: The "Hello World!" Application執行了自己的第一支程式,不過我花了快兩天的時間才執行成功。當下就分析自己為什麼會花這麼多時間:

1. 英文很爛。
2. 對電腦沒概念。
3. 打字慢。
4. 閱讀文章時,不會看重點。
5. 不知道如何找答案。

當時還有一個想法:既然網路上有英文的免費學習資源,何不加強自己的英文能力呢?
於是花了約一年時間加強自己英文的閱讀能力,後來的成果就不多說了。

進入主題
敝人相信從DOS就接觸電腦的人一定很了解且習慣Console-based的程式,因為DOS就是一個典型的Console-based OS,現今還是可以在少數地方看到DOS的足跡。簡單來說,Console-based application就是以文字介面為主的程式,但若加上觸碰螢幕與高階顯卡的話,可能就不是這樣定義了。

GUI-based Application又是怎麼回事?嗯,從程式的使用者來說好了,只要程式好用,才不管程式是Console-based還是GUI-based

但,開發程式的人就不一定會這麼想了,因為
Console-based的程式介面通常要花比較多的時間開發,GUI通常有library可以用。

問題:Console-based與GUI-based的程式哪個效能比較好?
(敝人可以忽略此問題嗎?)通常Console-based的程式校能比較好。

那此Blog的文章會以哪種為主呢?

高中生程式解題系統:提款卡密碼

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

題目連結 http://zerojudge.tw/ShowProblem?problemid=a065

此題用字串與字元的ASCII編碼來處理即可。

程式碼:
#include <iostream>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;

int main(int argc, char** argv) {
 string s = "";
 
 while(cin >> s) 
 {
  char c = s[0];
  
  for(int i = 1; i < s.size(); i++) {
   int code = c - s[i];
   if(code < 0)
    code = -code;
   cout << code;
   c = s[i];
  }
  
  cout << endl;
 }

 return 0;
}

謀殺小說天后

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。


克莉絲蒂,她所著的小說是我所喜歡看的,會看這一類的小說是因為在之前看了〈李伯伯最愛的40本書〉,索性去找了〈一個都不留 (And Then There Were None)〉,此書是我一開始看偵探小說的的第一本,一看完這本,就感覺她所寫的小說應該很著名吧!

底下是克莉絲蒂的相關網站
http://www.ylib.com/author/christie/


李伯伯的書單

真相只有一個
《一個都不留》阿嘉莎.克莉絲蒂
《白馬酒館》阿嘉莎.克莉絲蒂
《三口棺材》約翰.狄克森.卡爾
《Y的悲劇》艾勒里.昆恩
科幻預見未來
《科學怪人》瑪麗‧雪萊
《隱形人》H. G. 威爾斯
《化身博士》史蒂文生
《美麗新世界》阿道斯.赫胥黎
《華氏四五一》雷‧布萊貝利

時代交響曲
《基度山恩仇記》大仲馬
《雙城記》狄更斯

海洋冒險傳奇
《白鯨記》梅爾維爾
《海狼》傑克.倫敦
《老人與海》海明威

底層的吶喊
《悲慘世界》雨果
《憤怒的葡萄》約翰‧史坦貝克
《人鼠之間》約翰‧史坦貝克
《大地》賽珍珠
《推銷員之死》亞瑟‧密勒

政治的荒謬
《動物農莊》喬治.歐威爾
《一九八四》喬治.歐威爾

夢與希望
《小氣財神》狄更斯
《人為什麼而活》托爾斯泰
《大地之歌》吉米‧哈利

毀滅與死亡
《西線無戰事》雷馬克
《蒼蠅王》威廉‧高汀

生命的信仰與力量
《高爾基短篇傑作選》高爾基
《權力與榮耀》葛蘭姆.葛林
《深河》遠藤周作
《瘋子‧教授‧大字典》賽門‧溫契斯特
《最後十四堂星期二的課》米奇‧艾爾邦

華文創作

古典章回話英雄
《水滸傳》施耐庵
《三國演義》羅貫中

遙遠卻真實的故事
《城南舊事》林海音
《台北人》白先勇
《兒子的大玩偶》黃春明
《棋王、樹王、孩子王》鍾阿城

文化大旅行
《山居筆記》余秋雨

從科學中思考人文
《電學之父──法拉第的故事》張文亮

詩中有禪意
《十三朵白菊花》周夢蝶

好像離題了XD

回到主題吧,她的小說,我也看了快二十本,白羅先生的灰色腦細胞還真不是蓋的,瑪波小姐的普通常識還真是夠普通。我最喜愛的兩本是:「一個都不留」和「東方快車謀殺案」。

「馬叔公的玩笑」短篇小說也很有意思。如果以後我送書給我的小孩時,不知道我的小孩是會高興還是生氣呢?

讀書心得:謝幕(CURTAIN)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。


<謝幕>據說是白羅的最終案件(雖然我看完了,但我還是不覺得),在這一集裡,白羅開始坐在輪椅上,無法行動自如了,但,事有蹊翹,是真的無法行動還是裝出來的,請好奇的人去看此書吧,敝人才不想透露。

此書也可說是玩弄他人心理的人之最佳解讀吧,如果有人刻意製造他人情緒上的起伏而去做某些不好的事,這算不算犯罪?教唆犯嗎?那要如何取得證據呢?

完美犯罪似乎是推理小說家都想寫的題材,難度真高,閱讀的人也累。

讀書心得:一個都不留 (AND THEN THERE WERE NONE)

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。


此書為有謀殺天后之稱的阿嘉莎·克莉絲蒂所著,筆者會看這本小說的來由是因為看了<<李伯伯最愛的40本書>>,且當時的我完全沒看過推理小說,就看了這本書,看完之後,開始覺得<<名偵探柯南>>不是我的菜啦。

<<一個都不留>>架構於一首兒歌,內容(節錄自Wiki)如下:

中文翻譯
十個小兵人,外出去吃飯;
一個被嗆死,還剩九個人。
九個小兵人,熬夜熬得深;
一個睡過頭,還剩八個人。
八個小兵人,動身去德雲;
一個要留下,還剩七個人。
七個小兵人,用刀砍木棍;
一個砍自己,還剩六個人。
六個小兵人,無聊玩蜂箱;
一個被蟄死,還剩五個人。
五個小兵人,喜歡學法律;
一個當法官,還剩四個人。
四個小兵人,出海去逞能;
一個被紅魚吃掉,還剩三個人。
三個小兵人,去進動物園;
一個遭熊襲,還剩兩個人。
兩個小兵人,坐著曬太陽;
一個被曬焦,只剩一個人。
這個小兵人,孤單又影隻;
弔死了自己,一個也沒剩。
英文原文
Ten Jigaboo boys went out to dine;
One choked his little self and then there were nine.
Nine little Jigaboo boys sat up very late;
One overslept himself and then there were eight.
Eight little Jigaboo boys traveling in Devon;
One said he'd stay there and then there were seven.
Seven little Jigaboo boys chopping up sticks;
One chopped himself in halves and then there were six.
Six little Jigaboo boys playing with a hive;
A bumblebee stung one and then there were five.
Five little Jigaboo going in for law;
One got into Chancery and then there were four.
Four little Jigaboo boys going out to sea;
A red herring swallowed one and then there were three.
Three little Jigaboo boys walking in the zoo;
A big bear hugged one and then there were two.
Two Little Jigaboo boys sitting in the sun;
One got frizzled up and then there was one.
One little Jigaboo boy left all alone;
He went out and hanged himself and then there were none.

結局就真的一個都不留,而兇手到底是誰?

紀曉嵐造的詩

若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。

「黑不是,白不是,紅黃更不是;和狐狼貓狗彷彿,即非家畜,又非野獸。
詩也有,詞也有,論語上也有;對東西南北模糊,雖是短品,也是妙文。」

乾八卦,坤八卦,八八六十四卦,卦卦乾坤已定;
鸞九聲,鳳九聲,九九八十一聲,聲聲鸞鳳和鳴。


【四莫詩】:
貧莫斷書香,富莫入鹽行;
賤莫作奴役,貴莫貪賄贓。


這個婆娘不是人,九天仙女下凡塵;
生個兒子去做賊,偷得蟠桃獻母親。


金生水,水生木,木生火,火生土,土生金;
曾傳祖,祖傳父,父傳子,子傳孫,孫傳曾。


竹苞:各各草包


雙塔隱隱,七級四面八角;
孤掌搖搖,五指三長兩短。


一籬一櫓一漁舟,一個艄公一釣鉤;
一拍一呼還一笑,一人獨佔一江秋。


南通州,北通州,南北通州通南北;
東當舖,西當舖,東西當舖當東西。


一盞燈,四個字,酒酒酒;
二更鼓,兩面鑼,鐺鐺鐺。


有錢難買命,無藥可醫貧。


小翰林,穿冬衣,持夏扇,一部春秋曾讀否;
老總管,生南方,來北地,那個東西還在麼。


我南方,多山多水多才子;
俺北國,一天一地一聖人。

浮沉宦海如鷗鳥,生死書從麼蠹魚。