2007年11月10日 星期六

Forward chaining


Forward chaining 用於專家系統前式鍊結法,撰寫一圖形介面讓使用者輸入任意 N 個資料庫單元符號和任意 M 個規則,並於圖形介面中印出出每一回合資料庫改變的狀態。
舉例來說:
If X croaks and eats flies - Then X is a frog
If X chirps and sings - Then X is a canary
If X is a frog - Then X is green
If X is a canary - Then X is yellow

database:
a
b
c
d
rule:
a->x
b->y
xy->z
y->w
w->q

output:
第 1 回合 ..
增加 x.
增加 y.
第 2 回合 ..
增加 z.
增加 w.
第 3 回合 ..
增加 q.
第 4 回合 ..

困難度:**
時間複雜度:O(n^2)
程式語言:C#
預估時間:2 小時

解題原理:
1. 設計一介面讓使用者可以輸入任意 N 個資料庫單元和 M 個規則
2. 每一回合走訪所有的規則,若推論存在,則加入推論結果到資料庫中
3. 重複步驟3,直到所有規則皆不會產生推論
4. 完成

程式下載

原碼下載

2007年10月23日 星期二

大盤分析 96.10.23

fdrag逢低加碼電子股
杜富蓉 協理
96.10.23

盤勢分析:加權指數10/3日來到9783點之際,傳出國安基金獲利了結的消息,加上港股、陸股及印度股市輪流大幅震盪,市場又擔心電子股季報不如預期,大盤呈現9500~9800點的高檔震盪;在成交量始終無法突破1700億之後,指數原本就必須以退為進,拉回整理後,凝聚人氣,才有過高的機會。週(一)適逢國際股市大幅回檔,大盤一口氣跌破月線,直逼季線,幸而9/21日的跳空缺口發揮止跌效果,週(二)大盤在美股走穩下開始反彈。

美國近期所公佈的經濟資料,顯示美國房地產市場持續惡化,已影響到消費者支出,美國S&P500企業第三季及第四季的獲利都已向下修正,而這都在市場預期當中,因此道瓊及那斯達克指數10月份創了歷史新高,目前是創新高之後的拉回修正,只是美國傳統產業獲利受到次級房貸波及較大;新興市場的堀起,除了帶動基本原物料的需求外,對高科技產品的需求也與日俱增。美國電子業海外市場蓬勃成長,從近期Intel、Googles、Apple的優異財報即可窺之。因此國內電子業也陸續交出亮麗的季報,市場所擔心的電子業旺季不旺心理已全然消失,最近一週來,電子股佔大盤的成交比重已連續在七成以上,第四季表現突出的電子股將是年底多頭挑戰萬點的主攻部隊。

操作建議:道瓊指數此波回檔小破季線,那斯達克指數月線得而復失,因此只要那斯達克指數能守在2725點之上,台股站回9555點的月線,重返多頭趨勢,將是指日可待。而電子股的多頭重心,將集中在面板、PC及網通族群。不論是大尺吋或中、小尺吋面板,到明年底前供不應求的狀況將更趨惡化,今、明兩年獲利出現超乎市場預期的成長,相關的零組件廠商也同步受惠,因此面板族群短線漲多拉回降溫後,仍可逢低作中期佈局。

其次,由Intel季報所反應的今年第三季PC銷售呈現明顯成長,第四季聖誕節效應達到高峰。因此,相關的PC組裝大廠:華碩、緯創、仁寶及零組件廠商:金像電、新普、順達科、新日興等股價都有上漲空間。此外,WiMAX商機明、後年大幅顯現,受惠的廠商:東訊、台揚、合勤等有夢最美,股價相對強勢。


(原稿登載於96.10.24日工商時報証券版C2〞操盤心法〞專欄)

2007年10月10日 星期三

大盤分析 96.10.09

追價無力、短線整理
杜富蓉 協理
96.10.09

盤勢分析:上週美國公佈的經濟資料顯示,雖然房地產景氣仍有下探空間,但美國經濟仍維持溫和成長,激勵美元轉強,道瓊及那斯達克指數都創了今年新高。相對的,國際原物料價格,包括石油,非鐵金屬及CRB指數紛紛走低,拖累週(二)水泥、塑膠、鋼鐵等傳產股回檔。

加權指數在主流股拉回,電子股無力接棒下,以長黑跌破5日均線。雖然10日平均線尚未失守,但日KD指標已轉為高檔向下交叉,大盤在10/3日出現2156億的大量後,成交量再也無力突破1700億,顯示9800點關前追高意願不足,加權指數有機會拉回整理,以凝聚下次衝關的實力。

就技術面來看,國際股市今年創新高者不在少數,外資也由保守轉為連續三週買超,加上政府基金蓄勢待發;只要國際股市未出現出人意外的連續下跌,台股整理後,仍有再次挑戰萬點的機會。

加權指數6月份從8200點直衝9800點時,大盤主流的IC設計、高價電子股融資餘額大幅擴增,股價超漲後,拉回整理的時間加長,短線雖然也會反彈,但頭部成型,上檔解套賣壓不輕,在融資包袱尚未縮減下,暫時不易風雲再起,大幅上揚,而以持續中段整理居多。

操盤建議:面板兩虎繼9月營收大增後,第三季獲利呈現爆炸性成長,股價連續兩天走強,但仍無法帶動電子股指數站上410點。而週(二)友達成交量大增至20萬張,奇美電成交量也高達22萬張,短線籌碼凌亂,多頭攻勢將趨緩,相關的零組件個股,也不宜再追高搶進。

傳產股漲多回檔,又有原物料下跌疑慮,但拉回量縮,暫時以區間操作因應。航運股波段漲幅驚人,但散裝指標:台航、中航尚未反轉前,相關個股仍可短多應對。貨櫃航運的長榮、陽明、萬海利多不斷,但外資轉為賣超,待賣壓消除後,再來尋找反彈契機。金融股反彈至半山腰,拉回仍可留意比價偏低或具有獲利成長利多的:合庫、彰化銀行、第一金、國泰金、中壽等。


(原稿登載於96.10.10日工商時報証券版C2〞操盤心法〞專欄)

IBM 攜手 Google 聯合培養雲端運算人才

文章轉錄:http://taiwan.cnet.com/news/software/0,2000064574,20124806,00.htm

IBM攜手Google 聯合培養雲端運算人才
CNET 新聞專區:授權採用NYTimes文章 / by Steve Lohr  09/10/2007

即使是美國最久負盛名的大學也無法提供處理功能強大和高度複雜運算技術所需要的技術培訓。

因此,IBM和Google公佈一項研究計畫來解決這一問題。兩家公司將投資建立一個大規模的資料中心,學生可以通過網際網路遠端存取該資料中心,進行遠端研究,此即所謂的「雲端運算」(cloud computing)。

Google和IBM 對這種模式有很大的商業興趣。運算任務將越來越脫離桌上型,轉向企業運算中心,被當作服務透過網際網路進行處理。Google是「雲端運算」技術領域的領導廠商。
但是,Yahoo、Amazon.com、eBay等公司也推出搜尋、社交網路、Web-based電子郵件、線上商務等網際網路服務,它們也使用此一技術。在企業市場上,IBM 和其他廠商推出了預測市場趨勢、調整價格、最佳化採購和製造的網際網路服務。

這些服務的幕後英雄是資料中心,它們利用數以千計的處理器,儲存海量資料,使用專門軟體解決網際網路規模的運算挑戰。這種新型的對資料處理有較高要求的超級運算技術通常用於檢索Web ,或者需要在數秒、數分鐘內完成的任務。

「雲端運算」方面的大多數創新來自企業,但產業主管和電腦科學家表示,人才的匱乏可能會限制「雲端運算」技術未來的成長。卡內基梅隆大學電腦學院院長Randal E. Bryant表示,學術界和政府實驗室沒有跟上潮流,大學需要跟上這一潮流。

六所大學將參與這一計畫,它們是卡內基梅隆大學、麻省理工學院、史丹佛大學、加州大學柏克萊分校、馬裡蘭大學、華盛頓大學。

Google正在一個尚未公佈的地方建設一座資料中心,到今年年底時該資料中心將包含有1600多個處理器。IBM 也為該計畫建立了一個資料中心。該資料中心將運行Google資料中心軟體的開放原始碼版本。

這一資料中心的處理能力只相當於Google搜尋引擎的極小一部分,但科學家表示,它的處理能力非常強大,足以進行網際網路方面的研究。建立和運營這樣的資料中心是很困難的,而且代價很高。Google和IBM 已經表示將於未來2 年內在該專案上投入至少3000萬美元。

2007年9月17日 星期一

AJAX .NET Accordion - Validation of viewstate MAC failed

問題描述:

在使用AJAX .NET 1.0.618 版本中的 Accordion 時,動態載入不同的 UserControl 元件(.ascx),並透過 UpdatePanel 完成非同步網頁畫面更新,使整個畫面看起來就像 GMail 的操作介面。但有時會載入不同的 UserControl 時會發生如下的錯誤對話框,顯示「Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster、ensure that configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be use in cluster.」,接著網頁的 PostBack 就失效了,無法再進行操作。





目前網路解決方式:

這個問題在網路上已有一些相關的文章,主要是因為在 Page 或是一般 .aspx 網頁中使用了 EnableViewState = true 這個設定(此設定值是預設),因此有相關文章指出當不使用此設定值或設定 EnableViewStateMac = false 即可解決。如果設定 EnableViewState = false 就會造成 Accordion 無法正常使用。

正確解決方式:

這個問題對於是否使用 Accordion 這個 AJAX 的元件的直接關聯性無法得證,目前只知道當動態載入不同的 UserControl 元件時,有些內容有保含巢狀 UpdatePanel,有些是一般靜態網頁內容時,就會產生這個錯誤對話框;或許真的原因仍待確認。但解決方式為在 web.config 的 system.web 區段內或是一般 .aspx 網頁設定 viewStateEncryptionMode="True" 或 viewStateEncryptionMode="False" 即可解決,此設定值預設為 viewStateEncryptionMode="Auto",由此觀之,可能是在動態載入時,預設的情況會切換是否要加密 viewState ,因而造成錯誤。

2007年8月29日 星期三

網路介面卡修改器



下載

軟體名稱:網路介面卡修改器
軟體版本:v 1.0
軟體作者:cuteofdragon
軟體授權:免費軟體
發佈時間:2007/08/29

說明:使用 WMI 取得網路介面卡資訊,並修改註冊表內容以完成網路介面卡位址修改,詳細內容請參閱下面。

技術解析:
  1. 取得作用中的網路卡
    string strQry = "Select * from Win32_NetworkAdapter Where NetConnectionStatus=2";
    ManagementObjectSearcher mos = new ManagementObjectSearcher(strQry);
  2. 走訪網路卡資訊
    foreach (ManagementObject mo in mos.Get()) {
    ; // mo["Caption"] = 網路卡名稱
    ; // mo["Index"] = 網路卡索引
    ; // mo["MACAddress"] = 網路介面卡位址
    }
  3. 修改註冊表
    //ManagementObject mo = //"選擇的網路卡物件"
    RegistryKey nicKey = Registry.LocalMachine.OpenSubKey(@"SYSTEM\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10318}");
    RegistryKey newNicKey = nicKey.OpenSubKey(mo["Index"].ToString().PadLeft(4、'0')、true);
    newNicKey.SetValue("NetworkAddress","新的網路卡位址");
  4. 重新開機或使用 Shell32 重新啟用網路卡即可。

2007年5月23日 星期三

Excel 表格有條件合併


問題描述:

存在有三張Excel的學生名冊,分別紀載學生之獎學金、就學貸款和減免費用,以下分別描述:

  • 獎學金名冊有三個欄位,分別為學號、獎學金分類和金額,存在同一學號領取多筆獎學金
  • 就學貸款有二個欄位,分別為學號和貸款金額,同一學號只會有一筆就學貸款金額
  • 減免費用有二個欄位,分別為學號和減免事項,同一學號只會有一筆就學貸款金額

今吾人想輸出一張新的表格,此表格包含學生學號、獎學金分類、獎學金金額、就學貸款金額和減免事項等五個欄位,其中
  1. 以獎學金名冊為主,進行輸出,也就是說若獎學金名冊不重複學號有2000筆,就學貸款有5000筆,減免費用有1000筆,最後會輸出2000筆紀綠
  2. 不存在相同學號的紀錄筆
  3. 若重複領取獎學金之學生必須合併(金額相加,並取最高獎學金金額的分類)
  4. 每筆紀錄需輸出領獎學金之學生是否同時有就學貸款金額或減免事項
  5. 不得使用資料庫操作

技術解析:

  1. 將三張Excel分別輸出為三個以Tab分隔的文字檔
  2. 分別讀入三個文字檔
  3. 當讀入獎學金文字檔時,要判斷是否有重複學號,有的話要進行金額累加並調整獎學金分類
  4. 利用三個一維陣列物件儲存不同文字檔內容,並以學號為主要索引
  5. 循序走訪獎學金陣列,判斷獎學金陣列的學號是否存在另外二個陣列之中
  6. 完成

困難度:*
時間複雜度:O(n)
程式語言:C#
預估時間:2 小時

程式下載

原碼下載

2007年5月13日 星期日

[轉錄] 保誠人壽推出「金鑽年年變額年金保險」


保誠人壽推出「金鑽年年變額年金保險」 零保單前置費 退休金累積更快速 五月底前投保 免收前10年保單維持費用 ( 2007/05/07 )
(台北訊)看好退休市場的需求,保誠人壽推出「金鑽年年變額年金保險」,這個商品以退休規劃為主,具有零前置費用、低保單維持費的特色,保戶可以將保費全額投入投資帳戶中,更快速、穩健地累積退休準備金。配合新退休商品上市,保誠人壽推出5月優惠方案,即日起至5月31日止購買「金鑽年年變額年金保險」,即可享有前10年免收每月帳戶價值0.08%的保單維持費用。

年金險具有保證給付的特性,只要被保險人生存,就可以依約定持續領取年金金額,最適合用來保障退休後穩定的收入。根據保誠人壽2007年退休調查報告顯示,33%的民眾選擇保險作為退休理財的工具,而其中購買年金險的僅佔13%,顯見年金險市場仍有很大的成長空間。為了協助客戶做好退休準備,保誠人壽推出的「金鑽年年變額年金」,結合了年金險與投資型商品的優點,保戶不但享有最低保本的壽險保障,更可以選擇穩健的投資標的來獲取理想的投資報酬率。

保誠人壽台灣區總經理張志明表示,定期定額、長期投資、複利累積是退休金準備的三大原則。年金險在被保險人生存期間可以提供穩定而持續的退休收入給付,連結基金更具有長期獲利的機會,在歐美是很普遍的退休準備理財商品。

以30歲男性投保「保誠人壽金鑽年年變額年金保險」為例,每月固定繳交基本保險費10,000元,並選擇自60歲開始領取年金,保證期間20年。假設年金宣告利率為2%,當投資報酬率為3%時,每年可領取的年金金額為248,784元,平均每月約有2萬元的生活費;當投資報酬率為7%時,年金金額為495,942元,每月有近4萬2千元的生活費,可以享有經濟自足的老年生活。若不幸於年金保證期間身故,剩餘的年金還可以照顧遺族,受益人可選擇領取年金至保證期滿,或一次領取未支領的年金餘額。

在保單費用方面,「保誠人壽金鑽年年變額年金保險」免收保單前置費用、免收保單行政管理費用、免收轉換投資標的手續費,年金遞延期間每月僅收保單帳戶價值的0.08%的保單維持費用,若保戶要解約或部分解約,第11保單年度起免收解約費用。此外,這張保單還可附加醫療險、意外險與豁免保險費附約,保戶不但享有完整的醫療保障,豁免保險費附約更可以讓保戶做好風險控制,避免因失能或疾病而讓儲蓄退休金的計畫中斷。

為協助客戶進行退休規劃,保誠人壽特別規劃了專業課程,業務人員必須上課並通過測驗方可銷售退休商品。保誠人壽強調,退休準備必須先建立正確的退休規劃觀念,除了瞭解自己的財務狀況和退休目標外,還要選擇適合自己的理財方式。保誠人壽將藉由專業退休規劃的業務團隊,協助客戶瞭解自己的退休數字,並以完整的退休商品,為客戶打造健康與富足的退休生活。

看好退休市場的商機,保誠人壽大力推動退休規劃專案。圖為保誠人壽高階主管,由左至右分為別台灣區總經理張志明、業務系統總經理朱信福、行政系統總經理暨財務長張鎮坤。

本文轉錄自 保誠人壽新聞中心
有興趣讀者請 與我聯繫

2007年5月12日 星期六

整數分割

三、整數分割(Parition of Integer),如:4 = 4、3+1、2+2、2+1+1、1+1+1,共五種不重複分割方法,輸入任意數 n,列出所有分割方式和共有幾種分割方法。

input:
4

output:
1+1+1+1
1+1+2
2+2
3+1
4
共5種

困難度:**
時間複雜度:c1((1+5^(1/2))/2)^n + c2((1-5^(1/2))/2)^n,
      c1+c2 = 0,(c1(1+5^(1/2))/2)+(c2(1- 5^(1/2))/2)=1
程式語言:C++
預估時間:2 小時

解題原理:
1. 先取得使用者輸入欲分割的正整數
2. 任意正整數 n 必可寫為 n 個 1 連加,暫存在陣列 A[n]
3. 由左而右開始,一次處理鄰近二個數,讓右邊的數=右邊的數+左邊的數,之後把左邊的數設為零
4. 將目前陣列元素進行由小排到大,暫存排序後的陣列 B,印出不重複的陣列 B[n] 非零的數連加字串
5. 重複步驟 3,直到開始處理的位置到 n-1
6. 完成

程式下載

原碼下載


參考來源:長榮大學2007校內程式設計競賽複賽 試題 三

Armstrong

二、數學上 Armstrong 數可表示為 a^3 + b^3 + c^3 = abc,寫出所有三位數的 Armstrong 數。

output:
370

困難度:*
時間複雜度:O(n)
程式語言:C++
預估時間:15 分鐘

解題原理:
1. 先判斷欲輸出幾位數的阿姆斯壯數
2. 分別產生各個位數0~9的排列方式進行阿姆斯壯數比較
3. 完成

程式下載


原碼下載

參考來源:長榮大學2007校內程式設計競賽複賽 試題 二

十進位轉換

一、輸入十進位數和轉換基數為十六進位數
  輸入十進位數和轉換基數為八進位數

input:
255 16
100 8

output:
ff
144

困難度:*
時間複雜度:N/A
程式語言:C++
預估時間:5 分鐘

解題原理:
1. 先取得使用者輸入欲轉換的數字和基數
2. 使用內建的函式庫直接印出結果

程式下載


原碼下載


參考來源:長榮大學2007校內程式設計競賽複賽 試題 一

2007 數位學習實務論壇



2007 數位學習實務論壇於2007/05/11由元培科技大學資訊工程學系舉辦,邀請相關數位學習專家學者進行演講,論壇行程如上圖所示,演講內容大略可包括現今數位學習如何運用新的資訊技術達到不同的應用,像是使用RFID、Web 2.0或是語音辨識技術等。以下為演講語音線上播放:

  • 第一場:數位學習與環境教育
    演講者:國立中央大學環境工程研究所 王鵬堯教授



























  • 第二場: Learning 2.0
    演講者:資策會創新應用服務研究所 蔡澤銘副主任



























  • 第三場:數位學習與華語文學習應用
    演講者:資策會創新應用服務研究所 蔡德祿組長



























  • 第四場:學習數位化應用與數位化教材製作
    演講者:資策會數位教育研究所 李鎮宇經理


























            註:以上線上語音為個人收藏整理,如有任何問題請來信告之。

            2007年5月5日 星期六

            隨意桌面,數位溝通

            下載

            軟體名稱:Ad Hoc Desktop
            軟體版本:v 1.0.0
            軟體大小:450 KB
            軟體作者:cuteofdragon
            軟體授權:免費軟體
            發佈時間:2007/05/06

            背景概述
            在行動裝置和數位家庭娛樂的旋風席捲全球下,人與人之間透過網路溝通的機會也大幅度的提升;MSN Messenger、SKype等即時通訊軟體提供豐富和多樣性的需求,從單純的文字傳訊到語音聊天和最後的視訊會議,清楚地突顯出一種重要的概念-「數位溝通」。

            在視訊會議普及的數位時代中,人們目前依然停留在人與人之間的溝通與互動,對於人與人和電腦之間的三方溝通缺乏有效的機制,也就是說人們無法透過眼前電腦螢幕的表現即時的告訴遠在另一端的朋友,像是會議簡報內容、行車電子地圖、軟體操作等;因此要是有一個「隨意桌面」的概念讓這樣的理想實現,那數位溝通將更能具體實現遠大的一句話:「電腦將無所不在」。
            軟體導覽

            為了在數位時代實現數位溝通的理想,為了在網路世界創造隨意桌面的情境,本軟體運用新一代Microsoft .NET 2.0解決方案實現「隨意桌面,數位溝通」的理想,透過群組會議進行將桌面、視訊和語音一次雙向的傳送給所有的群組成員,運用TCP Socket、DirectSound和InteropServices技術讓數位溝通無遠弗屆。其中,TCP Socket傳送/接收序列化 串流資料,DirectSound提供語音錄製/播放功能,InteropServices連接Win32 API和COM元件將桌面序列化傳送。

            本軟體實現「隨意桌面,數位溝通」中創造了前所未見的數位時代溝通模式,人們可以視桌面為個人在網路上溝通的代理人,無論是在家、學校或是出外工作,皆可以隨時隨地的傳送您的代理人。在現今寬頻網路普及下,本軟體對於頻寬的限制亦相當重視,在隨意桌面傳送過程,平均每秒只需要30kbytes,這是因為本軟體實作螢幕比對、畫面壓縮和語音壓縮等技術,意味著「隨意桌面,數位溝通」的可行性、創新性和未來性。

            TCP Socket
            使用System.Net.Sockets.TcpListener傾聽串流伺服器168連接埠,運用封包轉送原理將用戶端欲傳送的隨意桌面畫面轉送給邀請的另一個用戶端,即不需考慮兩地之間的防火牆限制。在畫面傳送時,撰寫System.Net.Sockets.Socket動態地產生AdHocDesktop_TcpObject物件,接收桌面和語音原始byte陣列,並使用System.Net.Sockets.NetworkStream進行物件序列化,物件序列化使用 System.Runtime.Serialization.Formatters.Binary.BinaryFormatter。為了有效地減少資料量,本軟體撰寫螢幕比對原理和畫面及語音的壓縮,使隨意桌面在傳送期間,每秒平均為30kbytes,符合寬頻網路需求。

            在螢幕比對原理為將螢幕緩衝的畫面(如何取得螢幕緩衝詳見InteropService說明)以System.Drawing.Bitmap物件觀看,然後取出System.Drawing.Imaging.BitmapData,隨即可取得一維原始byte陣列,並根據Bitmap影像規格BGR原理進行比對。首先先取得一張比對依據影像,接下來取得的影像和前一張比對,相同的byte設為0。對於每一張影像的byte陣列採用System.IO.Compression.GZip壓縮;在另一端取得影像後,根據前一張完整影像進行影像重建,其減少傳送頻寬資料原理即相同byte設為0時,使用GZip即可有效地減少資料的儲存。在語音的壓縮亦使用GZip進行壓縮(如何取得語音緩衝詳DirectSound說明)。

            DirectSound
            採用Microsoft.DirectX.DirectSound.CaptureBuffer取得語音緩衝,Microsoft.DirectX.DirectSound.SecondaryBuffer進行語音播放,CaptureBuffer和SecondaryBuffer採用環狀緩衝方式實作,也就是說緩衝區為一固定大小,而存在二個指標,一個指向當前讀取/寫入的位置,另一個指向下一次寫入/讀取的位置,當抵達緩衝區結尾時即回到緩衝區開頭。

            由於緩衝必需由其他執行緒取得,在即時資料傳送時必需使用Microsoft.DirectX.DirectSound.Notify和Microsoft.DirectX.DirectSound. BufferPositionNotify,透過定位CaptureBuffer/SecondaryBuffer緩衝區在讀取/寫入第n個索引時進進行執行緒回呼,並定義回呼方法,詳細實作細節詳見程式碼。

            InteropService
            透過System.Runtime.InteropServices.DllImport定義呼叫Win32 API的靜態方法,其中GetDesktopWindow()、GetDC()為取得桌面獨一無二Handle,根據CreateCompatibleDC()、CreateCompatibleBitmap()將Handle所指向的螢幕緩衝區轉換成HBitmap指標,最後透過System.Drawing.Graphics將HBitmap轉換成System.Drawing.Bitmap物件,完成螢幕緩衝取得。

            軟體需求
            作業軟體 相容Microsoft Windows XP SP2
            相依套件 Microsoft .NET Framework 2.0
            Microsoft DirectX 9.0c
            硬體需求 CPU:Pentium IV 以上相容等級
            記憶體:512 MB 以上
            硬碟空間:8 GB 以上
            選擇配備 視訊攝影機
            音效卡 / 麥克風

            安裝執行
            1. 解壓縮AdHocDesktop_v1.0.0.zip。
            2. 需由一台電腦執行AdHocDesktop.StreamServer.exe開啟隨意桌面串流伺服器,並確認本機運行此軟體電腦的網路IP位址,例如:192.168.1.2。
            3. 欲進行隨意桌面傳送時,在別台電腦執行AdHocDesktop.User.exe開啟隨意桌面用戶端,並輸入隨意串流伺服器網路IP位址。
            4. 接著進行登入,帳號密碼可任意輸入。
            5. 開始啟動隨意桌面傳送。

            隨意桌面傳送示意圖



            原文下載

            本軟體榮獲2006微軟潛能創意盃台灣區軟體設計組 第三名。

            媒體串流製造精靈

            下載軟體
            使用手冊
            請先安裝 mpeg4_pack

            軟體名稱:MEA Suite 2006
            軟體版本:v 1.0.9
            軟體大小:78.5 MB
            軟體作者:cuteofdragon
            軟體授權:免費軟體
            發佈時間:2007/05/06

            說明:MEA Suite(以下簡稱本軟體)是設計來提供遠距教學和非同步教學的輔助工具,透過本軟體您可以預先錄製你想要的影片和後製完成的影片,其中包括軟體使用、影片展示、個人Demo、教學示範…等等,無論你在世界任何地方,只要透過本軟體就可以輕鬆達到這些功能。本軟體採用Microsoft最先進的影片壓縮技術和串流技術來傳送和保存您錄製的影片,只要支援進階串流格式(ASF)的電腦,您完全不需要考慮任何時間、任何地方觀看您所錄製或觀看別人錄製的影片。透過本軟體,您可以錄製一系列的影片,像是Photoshop教學、3D Max教學、個人履歷…等來發佈在全球資訊網(Internet),讓世界各地的人觀看您精心錄製的影片、實為工作或是學習的一大利器。

            本軟體榮獲長榮大學資訊管理學系第十屆畢業專題第一名(電子全文 )。
            本軟體榮獲第十屆全國大專院校資訊管理實務專題暨資訊服務創新競賽佳作。

            N 邊形面積求解

            輸入任意n邊形座標,求面積。(先輸入幾邊形,再依序輸入各頂點座標)

            input
            4
            1 1
            5 1
            5 3
            1 3

            output
            8.0000

            input
            4
            2 1
            5 1
            2 3
            1 3

            output
            3.9800

            input
            4
            1 0
            0 1
            -1 0
            0 -1

            output
            2.0040

            困難度:**
            時間複雜度:O(n^2)
            程式語言:C++
            預估時間:2 小時

            解題原理:
            1. 先取得使用者輸入的邊數
            2. 使用一維陣列分別儲存x和y陣列座標
            3. 記算x座標和y座標的最小和最大即為最小可包含n邊形的矩形
            4. 取矩形內足夠的隨機亂數的座標,判斷落於n邊形的座標數
            5. 當前後兩次落於座標的點數比率小於百分之一時,即逼近n邊形面積
            6. 完成

            程式下載


            原碼下載


            參考來源:長榮大學2007校內程式設計競賽初賽 試題 二

            卡片問題

            考慮以下四張卡片,每張卡片有八個數字

            第一張:1 3 5 7 9 11 13 15
            第二張:2 3 6 7 10 11 14 15
            第三張:4 5 6 7 12 13 14 15
            第四張:8 9 10 11 12 13 14 15

            若問數字7存在那幾張卡片,則為第一、第二、第三張,就將第一、第二和第三張卡片的第一個數字加起來,即為數字7

            若卡片為五張時,則卡片會有十六個數字
            問隨意輸入n張卡片時,列出n張卡片的所有數字
            (提示:此題目為二進位之應用)

            困難度:**
            時間複雜度:O(n^2)
            程式語言:C++
            預估時間:1 小時

            解題原理:
            1. 先取得使用者輸入的次數
            2. 先考慮從1到n每個數字到n^2的布林OR的關係去瞭解2進位可能推導原理
            3. 發現正確解為第一個數字要為2的次方,之後往後看不可以重覆,且只能取2^n/2個數
            4. 完成


            程式下載


            原碼下載


            參考來源:長榮大學2007校內程式設計競賽初賽 試題 一

            2007年4月23日 星期一

            Wagering

            四、打賭遊戲
            三個箱子中有一個放了巨額獎金,另兩個是空的。參賽者選擇一個箱子後,莊家打開一個空的箱子,問參賽者要不要改變選擇換到另一個箱子。此時參賽者有三種可能的策略:

            1.維持原來之選擇
            2. 換到另一個箱子
            3. 隨機(random)決定要不要換

            最後莊家公佈答案,決定勝負。請寫一程式完成這個遊戲,並統計猜中的機率。


            提示:遊戲開始前必須輸入要玩的次數,並顯示三種策略之代號(參考Sample Output)。程式必先隨機決定巨額獎金放置之箱子,但尚不能公佈,參賽者此時決定其選擇之箱子,接著莊家打開一個空的箱子之後,詢問參賽者決定採用何種策略(參考Sample Output),此時顯示參賽者最後選擇之箱子,然後公佈答案及猜中與否。遊戲結束後公佈猜中之機率。

             
            Sample Output
            請輸入要玩之次數: 10
            策略代號:
            1. 維持原來之選擇
            2. 換到另一個箱子
            3. 隨機決定要不要換
            ***************************
            請輸入所選擇之箱子號碼: 1
            莊家打開2號箱
            請輸入策略代號: 1
            最後選擇1號箱
            * 巨額獎金在3號箱
            >> 失敗
            ***************************

            請輸入所選擇之箱子號碼: 3
            莊家打開1號箱
            請輸入策略代號: 2
            最後選擇2號箱
            * 巨額獎金在3號箱
            >> 失敗
            ***************************

            請輸入所選擇之箱子號碼: 2
            莊家打開3號箱
            請輸入策略代號: 3
            最後選擇2號箱
            * 巨額獎金在2號箱
            >> 成功
            ***************************




            ***************************

            遊戲結束,成功率0.45 


            困難度:*
            時間複雜度:O(n)
            程式語言:C++
            預估時間:1 小時

            解題原理:
            1. 先取得使用者輸入玩的次數
            2. 隨機產生巨額寶箱號碼
            3. 莊家隨機打開非使用者且非巨額寶箱號碼
            4. 處理策略代號,如果選擇換到另一個寶箱,演算法為 1+2+3 - 莊家打開寶箱號碼 - 使用者原先選擇寶箱號碼
            5. 完成


            程式下載


            原碼下載


            參考來源:中山大學八十九學年度電腦程式設計競賽 試題 四

            2007年4月20日 星期五

            Tower of Hanoi


            三、河內塔遊戲(Tower of Hanoi
            河內塔遊戲中有三根支架ABC,每根支架最多可放n個大小不同、中心挖孔的圓盤,大圓盤不得放在小圓盤上面。起先n個圓盤均置於支架A上(如圖一所示,以n=3為例)。今欲將這n個圓盤從支架A搬到支架C,每次只能搬一個盤子,支架B當作暫存處,請問共須搬動多少次的盤子才能完成?


            請寫一個非遞迴(non-recursive)程式來處理這個問題。為簡單起見,這n個圓盤以數字1n來表示,大數字代表大盤子,圓盤置於支架之情形用橫式表示,請參考Sample
            Output
            。程式開始時需讀入圓盤之個數n3n8),然後顯示支架ABC上圓盤放置情形(參考Sample
            Output
            ,以n=3為例),當搬動之次數為5之倍數(5,
            10、15、…
            )時,需顯示ABC支架上圓盤放置之情形,並印出已經搬動盤子的次數。螢幕印滿後暫停,按任何鍵再繼續執行,直到完成後,顯示此n個盤子已搬至支架C上,並印出搬動之總次數。



            Sample Output

            請輸入圓盤數目: 3
            *************************

            起始狀態:
            支架A 3 2 1
            支架B
            支架C
            *************************

            搬了5次之後
            支架A 1
            支架B 2
            支架C 3
            *************************




            *************************

            共搬了7次才完成
            支架A
            支架B
            支架C 3 2 1
             

            困難度:**
            時間複雜度:O(n)
            程式語言:C++
            預估時間:1 小時

            解題原理:
            1. 根據 Glenn C. Rhoads 提出對河內塔非遞迴解方式,以二進位方式進行操作,得到驚人的結果。其原理是假設有3個支架分別為0~2,一開始第一個支架為0,如果目前要移動的盤子是偶數,則要移動到第1個支架,否則移動到第2個支架
            2. 計算螢幕中印出的行數,進行處理
            3. 使用向量儲存目前支架的集合,每五次印出
            4. 完成

            程式下載

            原碼下載


            參考來源:中山大學八十九學年度電腦程式設計競賽 試題 三

            2007年4月19日 星期四

            Manage Business Card

            二、Write a program that allows user to manage his business card collection.

            C:\>cardfile cardfile.dat

            Your program should be able to support the following function by a single linked list structure:
            1. Add or delete a card to or from the data file.
            2. Find a card based on name search.
            3. Edit an existing card (change the phone number or company)
            4. List the contents of the file (in alphabetical order)
            5. Quit (save changes)

            The business card (card structure) should include the following information:
            Name (30 characters)
            Phone (15 characters)
            Company (40 characters)

            <Example of command line>:Add name、phone number and company line by line:
            Chris Lee
            5252000
            Dept. of EE、NSYSU
            <Example of command line>: Find Chris Lee
            <Example of command line>: Edit Chris Lee
            <Example of command line>: List Chris Lee
            <Example of command line>: List All

            Your program should give user the necessary messages、such as usage of your program and some necessary error messages.

            <hint>


            The format of the data file is one line per card record with a tab as a field separator. The data is read in a line at a time by the fgets() function、the newline character is removed、and the data fields
            extracted by successive calls to the strtok()、which copies tokens from a data stream.


            困難度:*
            時間複雜度:O(n)
            程式語言:C++
            預估時間:3 小時

            解題原理:
            1. 透過終端機介面判斷欲選擇的功能
            2. 使用單向鏈結串列進行資料的新增、修改、刪除、尋找和排序
            3. 根據使用者選擇的指令在終端機介面上顯示
            4. 完成

            程式下載


            原碼下載

            參考來源:中山大學八十九學年度電腦程式設計競賽 試題 二

            2007年4月18日 星期三

            Sorting

            一、Write a program that can read an array of integers and sort the array of integers into ascending order or descending order. Your program must be able to
            (1) Read the elements of the array from the keyboard.
            (2) Use command-line arguments to pass either –a for ascending order or –d for descending order.
            (3) Print the values of the array on the screen after ascending or descending.
            (4) Reallocate the memory for the array to 1/N of the current number of elements、where N is any positive integer. Use command-line argument to pass N from the keyboard. Print the values remaining in the array.

            <Examples of Input and Output>
            Input: 5 4 8 3 20 11 –a Output: 3 4 5 8 11 20
            Input: N = 2 Output: 3 4 5
            Input: N = 3 Output: 3 4

            Input: 5 4 8 3 20 11 –d Output: 20 11 8 5 4 3
            Input: N = 2 Output: 20 11 8
            Input: N = 3 Output: 20 11

            困難度:*
            時間複雜度:O(n^2)
            程式語言:C++
            預估時間:1 小時

            解題原理:
            1. 以字串讀入內容,一次處理一行
            2. 判斷是遞增或遞減排序
            3. 取得輸入的整數內容進行排序
            4. 完成

            程式下載


            原碼下載


            參考來源:中山大學八十九學年度電腦程式設計競賽 試題 一

            2007年4月17日 星期二

            The Prefix Evaluator

            The Prefix Evaluator

            Let P be a prefix expression which is composed of the characters in the set {『1』、『3』、『5』、『7』、『9』、『$』、『%』} where each of the operands in P is a digit and the length of P is not greater than 30 characters. The symbols 『$』 and 『%』 are binary operators in P and defined as follows: x $ y = (x + y)/2 and x % y = (x - y)/2 where xy
            I {1、3、5、7、9}. Please write a program to evaluate P.

            Input Format:
            A prefix expression P
            I {『1』、『3』、『5』、『7』、『9』、『$』、『%』}+ where 1 P 30.

            Output Format:
            The value of P. Note that the data type of the output must be 「float」.

            Sample Input:
            1. $39
            2. %57
            3. $$39%57
            4. %%%1357

            Sample Output:
            1. 6.000000
            2. -1.000000
            3. 3.500000
            4.-5.000000

            困難度:*
            時間複雜度:O(n^2)
            程式語言:C++
            預估時間:1 小時

            解題原理:
            1. 以字串讀入內容,一次處理一行
            2. 將每個字元以浮點數的觀點進行處理
            3. 如果字元是運算子則設為很大的數
            4. 從右往左看,找到第一個運算子後進行運算,若%39,則3%9
            5. 重複步驟4,直到沒有運算子即完成

            程式下載


            原碼下載


            參考來源:中山大學 九十三學年度電腦程式設計競賽 試題 Problem D

            2007年4月16日 星期一

            The Postfix Converter

            The Postfix Converter

            Let W be an infix expression which is composed of the characters in the set {『a』、『b』、『c』、『d』、『e』、『#』、『@』、『(』、『)』} where the length of W is not greater than 30 characters. The alphabets 『a』、『b』、『c』、『d』、and 『e』 are the operands in W. The symbols 『#』 and 『@』 are binary operators in W where the priority of # is less than that of 『@』、i.e.、「a # b @ c」 is equivalent to 「a # (b @ c)」 and 「a @ b # c」 is equivalent to 「(a @ b) # c」. The operator 『#』 is with left associativity、i.e.、「a # b # c」 is equivalent to 「(a # b) # c」、while the operator 『@』 is with right associativity、i.e.、「a @ b @ c」 is equivalent to 「a @ (b @ c)」. Please write a program to convert W into a postfix expression.

            Input Format:
            An infix expression W
            I {『a』、『b』、『c』、『d』、『e』、『#』、『@』、『(』、『)』}+ with 1 W 30.

            Output Format:

            The postfix form of W.

            Sample Input:
            1. a # b @ c @ d # e
            2. a @ (b # c) @ d
            3. a # b @ ((c # d) @ (e # a))

            Sample Output:
            1. abcd@@#e#
            2. abc#d@@
            3. abcd#ea#@@#

            困難度:**
            時間複雜度:O(n)
            程式語言:C++
            預估時間:5 小時

            解題原理:
            1. 以字串讀入內容,一次處理一行
            2. 先去除空白
            3. 將每個字元以字串容器的觀點進行處理
            4. 設定每種不同字元的優先權
            5. 每次從字串容器集合取出優先權最高的字元
            6. 如果是最高優先權的括號則進行分進合擊遞迴演算法,先處理括號內的字元,進入步驟7,否則進入步驟8
            7. 如果欲處理的內容仍包含括號,進入步驟3處理括號內的字元,否則進入步驟8
            8. 此時處理的字元為1個運算子和2個運算元,進行後序轉換,若a@b,則ab@
            9. 重複步驟3-8,直到沒有運算子即完成

            程式下載


            原碼下載


            參考來源:中山大學 九十三學年度電腦程式設計競賽 試題 Problem C

            2007年4月14日 星期六

            Windows Mobile 5.0 for Pocket PC – CHT 手寫辨識技術檔案

            Windows Mobile 5.0 for Pocket PC – CHT 手寫辨識技術檔案

            大綱
            背景
            簡介
            手寫辨識函式庫
            自訂手寫辨識區域
            自訂截取手寫辨識文字
            結語

            背景
            此技術文章是對微軟行動裝置開發平台Windows Mobile 5.0 for Pocket PC – CHT部署熟悉的讀者,且具備對於Visual Studio .NET圖形視窗設計和C# 程式語言的技術。

            簡介
            行動裝置無論是Smartphone或是Pocket PC,近年在通訊電子產業大放異彩,當然軟體巨擘 Microsoft 微軟公司也相當致力於行動裝置的領域,從 Pocket PC 2002、Pocket 2003、Smartphone 2003、Windows CE 5.0到Windows Mobile 5.0,在在顯示出微軟公司對於行動裝置的成就,其中在軟體整合部分也在 Microsoft Visual Studio .NET 系列的程式開發工具開始支援SmartDevice的軟體開發,整合 .NET Framework 和 .NET Compact Framework 於開發工具中,使得程式開發人員在操作上可以使用相同的開發模式、熟悉的工具介面、一致性的 .NET 函式庫進行操作,大大提升了微軟在行動裝置軟體發展的競爭力。

            行動裝置與一般手提電腦或是個人電腦不同的功能即是手寫辨識,透過觸控筆的劃記和點選進行裝置介面的操作和文字輸入,一般來說,行動裝置皆內建了手寫辨識的功能,在中文版的Windows Mobile 5.0 for Pocket PC – CHT行動裝置而言,無論是中文、英文或是數字的手寫辨識率已是相當精準且成熟的技術,而手寫區域分為兩種,一種是全螢幕輸入和一種是在螢幕下方區域輸入;對於程式開發人員而言,若是要自行處理辨識的文字、手寫的區域位置或是候選字的排列優先順序等,並無法直接變更內建的手寫辨識軟體的設定。

            手寫辨識函式庫
            在相容於Windows Mobile 5.0 for Pocket PC – CHT的行動裝置中,作業系統提供了一系列的函式庫讓程式設計人員使用,目前提供的版本只提供 eVC++ 直接呼叫,並不能直接從 .NET 的程式呼叫,因此須透過DllImport 的方式進行函式原型宣告。
            詳細範例程式碼請參考原文下載。

            自訂手寫辨識區域
            1. 建立 Microsoft Visual Studio .NET 2005中的SmartDevice 專案
            2. 在Designer視窗建立一個Panel,此Panel為手寫辨識的區域,可放置在任何視窗的位置和大小
            3. 對 Panel取得MouseMove、MouseDown、MouseUp和Paint事件
            4. 紀錄滑鼠(觸控筆)的移動軌跡座標
            5. 同步繪製筆跡在Panel元件上
            詳細範例程式碼請參考原文下載。

            自訂截取手寫辨識文字
            1. 初始化手寫辨識函式庫
            2. 開始執行手寫辨識
            3. 持續加入滑鼠(觸控筆)座標軌跡
            4. 進行手寫辨識
            詳細範例程式碼請參考原文下載。


            結語




















            透過操作Windows Mobile 5.0 for Pocket PC – CHT
            提供的手寫辨識函式庫,程式開發人員可以自訂手寫辨識區域和處理手寫辨識文字,本文示範了這些過程的片段完整功能的程式碼,對於函式庫的功能和操作可查詢MSDN,這裡就不各別作說明。

            原文下載

            全文完

            移除 Microsoft FrontPage 中文翻譯增益集

            問題描述:
            在安裝 Microsoft FrontPage 2003 後,如果也安裝了 Microsoft Visual Studio .NET 2005,可能會產生每次開啟 FrontPage 時會造成 Visual Studio .NET 的 Installer 蒐集資訊的進度對話框,而延遲開啟畫面的時間。造成原因是繁簡翻譯(中文翻譯增益集)工具按鈕的影響,但是關閉此工具按鈕後,下次開啟 FrontPage 仍然無法解決。


            解決方式:

            1. 開啟檔案總管
            2. 到目錄 C:\Program Files\Common Files\Microsoft Shared\PROOF
            3. 把 FPZHTRAN.DLL 檔案改成 FPZHTRAN.DLL.bak
            4. 完成

            注意事項:

            測試將檔名改回是無法恢復原來的工具按鈕,請注意。

            2007年4月10日 星期二

            A Simple Interpreter

            A Simple Interpreter

            In this problem、we will define a simple interpreter、and you are asked to write
            a program to implement your algorithm.
            The basic parsing rules of the simple interpreter are defined as follows:
            1. <digit> ::= 0 1 2 3 4 5 6 7 8 9
            2. <int> ::= <digit> <int><digit>
            3. <op> ::= + -
            4. <stm> ::= SUM = SUM <op> <int>; SUM = SUM <op> X;
            5. support the function to interpret the following program paragraph.

            BEGIN
            X= <int>;
            SUM=0;
            While(X != 0){
            <stm>
            X=X-1;
            }
            END

            Your program can input the program paragraph accepted by above definitions、and
            output the value of SUM.

            Input Format:
            Input any program paragraph.

            Output Format:
            Report the value of SUM or the undefined messages.

            Sample Input:
            (1)
            BEGIN
            X= 10;
            SUM=0;
            While(X != 0){
            SUM=SUM+X;
            X=X-1;
            }
            END

            (2)
            BEGIN
            X= 10;
            SUM=0;
            While(X != 0){
            SUM=X+1;
            X=X-1;
            }
            END

            (3)
            BEGIN
            X= 10;
            SUM=0;
            While(X != 0){
            SUM=SUM+X;
            X=X+1;
            }
            END

            Sample Output:
            (1) SUM=55
            (2) <undefined>
            (3) <undefined>

            困難度:**
            時間複雜度:O(n)
            程式語言:C++
            預估時間:4 小時

            解題原理:
            1. 以字串讀入所有內容
            2. 進行正規化去除空白、換行等字元
            3. 分解以分號為基準的單元
            4. 判斷何時進行 While 迴圈內的運算


            程式下載

            原碼下載

            參考來源:中山大學 九十三學年度電腦程式設計競賽 試題 Problem A

            The Shortest Path

            The Shortest Path

            The Graph is defined by the nodes、the edges and the edge weights. You are asked to complete a program to input a graph、the starting node and the ending node and to output the shortest path cost and its traveling nodes.

            Input Format:
            First、input graph. The formats as follows:
            [GRAPH]
            <node A>、<node B>、<edge weight 0>
            <node B>、<node C>、<edge weight 1>
            …..
            [END]

            Second、input starting and ending node pair. The formats as follows:
            <starting node>、<ending node>

            Output Format:
            The shortest path cost: <minimum weight>
            Traveling nodes: <starting node>、<node 0>、…. 、<ending node>

            Sample Input:
            The example graph:





            [GRAPH]
            1、2、2
            2、4、3
            1、3、1
            3、4、2
            3、5、3
            4、5、2
            [END]
            2、5

            Sample Output:
            The shortest path cost: 5
            Traveling nodes: 2、4、5


            困難度:***
            時間複雜度:O(n^2)
            程式語言:C++

            解題原理:
            1. 以字串讀入後進行處理,一次處理一行
            2. 建立圖形類別(包含點、邊的關聯)
            3. 使用 Dijkstra 演算法找出最短路徑

            Dijkstra 演算法:
            1. 假設圖形 G 存在點集合 V,每個點有其權重 W,D 為點集合權重之集合
            2. 令 Q 為 V 之點集合複本,Pi 為最佳路徑之點集合
            3. 當 Q 集合大於零進入步驟 4,否則到步驟 8
            4. 從 Q 中取出在 D 中最小的點權重 u,以 D[u] 表示
            5. 若 u 與 V 中任一點 v 存在可行邊,且 v 是存在於 Q
            6. 則 D[v] = D[u] + W(u、v),Pi[v] = u
            7. 回到步驟 3
            8. 完成

            程式下載

            原碼下載

            參考來源:中山大學 九十三學年度電腦程式設計競賽 試題 Problem B

            2007年4月5日 星期四

            Wu-Zi-Qi

            Wu-Zi-Qi ( )

            Problem Description
            The game "wu-zi-qi"( ) is a game played by two people. The two player A and B take turns marking a dot at the unmarked intersection of an 20x20 grid. The color of the dots marked by A is black and the color of the dots marked by B is white. Initially、the chessboard is empty、which means that all the intersetions of the 20 grid are unmarked. The player who first marks 5 dots consecutively in a line wins. The line on which the winning player marked can be a horizontal line、a verticle line、or a diagonal line with slop 1 or -1.
            Assume that the coordinates of the intersection of the 20x20 grid is denoted by (x; y)、where 0 <= x、y <= 19. Given a set of coordinates of the black dots、and a set of coordinates of the write dots、write a program to determine who wins the game.

            Input Format
            The inpute file contains many sets of test data. Each test data contains two lines、and each line conatins a set of coodinates of the dots marked by the player. The first line is for the player A and the second line is for player B. The last test data set is followed by (0、0) (0、0)、indicating the end of the file.

            Output Format
            For each test data set、print the winner of the game.

            Sample Input
            (2,3) (2,4) (2,5) (2,6) (2,7)
            (3,3) (3,4) (3,5) (3,6)
            (3,2) (4,2) (5,2) (6,2) (7,7)
            (3,3) (4,3) (5,3) (6,3) (7,3)
            (3,3) (4,4) (5,5) (6,6) (7,7)
            (3,2) (4,2) (5,2) (6,2)
            (3,2) (4,2) (5,2) (6,2)(1,1)
            (2,14) (3,13) (4,12) (5,11) (6,10)
            (0,0) (0,0)

            Sample Output
            A wins
            B wins
            A wins
            B wins

            困難度:*

            時間複雜度:O(n^2)

            解題原理:
            1. 以字串讀入後進行處理,一次處理二行
            2. 將字串座標進行分割後落子
            3. 每一子有八個方向,分別為上、下、左、右、右上、右下、左上、左下,依序判斷是否連續落下五子

            另解:
            使用 dynamic programming,計算解決一個棋盤的問題等於分解 4 等份後再解決。
            T(n) = 4T(n/4) + O(n)

            程式下載


            原碼下載

            參考來源:中山大學 九十二學年度電腦程式設計競賽 試題 Problem 3

            Least Common Multiple

            Least Common Multiple

            Problem Description
            A least common multiple of three positive integers a、b、and c is the smallest positive integer m which is a multiple of a、b、and c. Given a positive integer n、find three positive integers a、b、and c such that n = a + b + c and the least common multiple of a、b、and c is minimized.

            Input Format
            Input data contains a set of positive numbers. Assume that all the numbers are no more than 10000. The last data is followed by 0、indicating the end of input data.

            Output Format
            For each positive integer n in the input file、print three positive integers a、b、and c、a <= b <= c、such that the least common multiple of a、b、and c is as small as possible.

            Sample Input
            35
            100
            9999
            0

            Sample Output
            35=7+14+14
            100=20+40+40
            9999=3333+3333+3333

            困難度:**

            解題原理:
            1. 以整數讀入正數 n 後進行處理,一次處理一個整數
            2. 若為質數,a、b、c 三數必為 1+(n-1/2)+(n-1/2) 方能使 LCM 最小(此步驟亦可忽略)
            3. 窮舉所有從 1 到 n/2 數進行 LCM 比較
            4. 改進窮舉演算法:
            b 可改寫為 p * a,p 為常數
            c 可改鳥為 q * b,q 為常數
            故當 a + p*a + q*b 時,LCM 必最小

            延伸思考:
            當 a、b、c 三數為 p、px、py 形式時,LCM 必為最小;令三數質因數為集合 S,x、y 為最小質因數 n 之 (n-1)/2,p 為 S - n,故 a+b+c = p+n+n

            證明論點:
            1. 證 a、b、c 三數改寫為 pa'、pa'b'、pa'b'c' 時,pa' pa'b'c', pa'b' pa'b'c'
            2. 證 pab = pabc
            3. 證 p 必為最小質因數,LCM 方為最小
            提示:(a+b)/2 >= (ab)^(0.5)

            程式下載

            原碼下載

            參考來源:中山大學 九十二學年度電腦程式設計競賽 試題 Problem 2

            Factoring a Polynomial

            Factoring a Polynomial

            Problem Description
            Let Z[x] be the set of all polynomials in x with integer coefficients. Let f(x) = anx^n + an-1x^n-1 + ... + a1x + a0 be a polynomial in Z[x]. If an is not zero、then the degree of f(x) is n、and an is called the leading coefficients of f(x).
            A polynomial f(x) in Z[x] is composite if there are polynomials g(x) and h(x) in Z[x]、with degree at least 1、such that f(x) = g(x)h(x). We call g(x) and h(x) the factors of f(x).
            A polynomial is prime if it is not composite. Given a polynomial f(x) with degree at most3、find its prime factors.

            Input Format
            Input data contains a set of polynomials of degree at most 3. Each polynomial f(x) =
            a3x^3 + a2x^2 + a1x + a0 is represented by its coefficients a3、a2、a1、and a0. Assume that the absolute values of all the coefficients are no more than 10000. The last polynomial is followed by 0、0、0、0、indicating the end of input data.

            Output Format
            For each polynomial f(x)、print its prime factors. When the greatest common divisor of the coefficients is not 1、print the greatest common divisor before its prime factors. It is also required that the leading coefficient of each prime factor is positive.

            Sample Input
            0 1 2 1
            0 -2 4 2
            -1 3 -3 1
            0 0 0 0

            Sample Output
            (x + 1)(x + 1)
            -2(x^2 - 2x - 1)
            -1(x + 1)(x + 1)(x + 1)

            解題原理:
            1. 以整數陣列讀入係數後進行處理,一個陣列元素依序表示一個係數
            2. 判斷最高係數領導次方,並修正為正數係數
            3. 提出可能的公因數
            4. 使用一次因式檢定排列組合所有可能因式
            a3x^3 + a2x^2 + a1x + a0
            若 px-q 為一根,則 p a3、q a0
            5. 代入可能根計算原式 = 0 表示確有此根,表所有除非重新計算原式
            6. 重複計算所有可能根

            困難度:***

            程式下載

            原碼下載

            參考來源:中山大學 九十二學年度電腦程式設計競賽 試題 Problem 1

            2007年4月2日 星期一

            Long Integer Multiplication

            Long Integer Multiplication

            Problem Description
            In this problem、you will implement the multiplication of two integers. The integers
            considered in this problem may be very large. Its value may be too large to be stored
            in a xed amount of bytes or words in memory. Thus、you cannot use any data type in
            any language in this programming contest to store and manipulate the integers. You must
            design a proper data structure to store an integer and write all the operations to do the
            multiplication of two integers.

            Input Format
            Input data contains a set of two integers A and B. The last line of the input le contains
            two 0's、indicating the end of the input.

            Output Format
            For each pair of integrs A and B in the input le、print is product C(= A * B).

            Sample Input
            12345678901234567890123456 111
            -2567 111
            -111 -12345678901234567890123456
            0 0

            Sample Output
            1370370358037037035803703616
            -284937
            1370370358037037035803703616

            解題原理:
            1. 以字串陣列讀入大數後進行處理
            2. 將大數每一個數字視為一個字元陣列元素
            3. 將兩個大數使用數學乘法相乘

            困難度:*

            程式下載

            原碼下載


            參考來源:中山大學 九十二學年度電腦程式設計競賽 試題 Problem 4

            2007年3月29日 星期四

            實作 Turing Machine 範例

            Turing Machine 定義:

            A Turing machine M is defined by (Q,S,G,d,qs,qa,qr)、with
            ‧ states Q ={qs,q0,q1,q2,q3,q4,qa,qr}
            ‧ input alphabet S = {>,0,1,u}
            ‧ start state qs 屬於 Q
            ‧ accept state qa 屬於 Q
            ‧ reject state qr 屬於 Q
            ‧ transition function d

            q 屬於 Q、 s 屬於 S d(q、s)
            qs 0 (q0 、> 、R)
            qs 1 (q1 、> 、R)
            qs > (qs 、> 、R)
            qs u (qa 、u 、-)
            q0 0 (q0 、0 、R)
            q0 1 (q0 、1 、R)
            q0 u (q2 、u 、L)
            q1 0 (q1 、0 、R)
            q1 1 (q1 、1 、R)
            q1 u (q3 、u 、L)
            q2 0 (q4 、u 、L)
            q2 1 (qr 、1 、-)
            q2 > (qa 、u 、R)
            q3 0 (qr 、1 、-)
            q3 1 (q4 、u 、L)
            q3 > (qa 、> 、R)
            q4 0 (q4 、0 、L)
            q4 1 (q4 、1 、L)
            q4 > (qs 、> 、R)
            說明:輸入檔(input-1.txt)第一行表示有幾個 Turing Machine 迴圈要進行,輸出檔(out-1.txt) 1 表示接受,0 表示拒絕。

            輸入:
            3
            >101u
            >11000u
            >1010u

            輸出:
            1
            0
            0

            程式下載

            原碼下載

            移除 Adobe Acrobat PDF Office Addin

            問題描述:

            在安裝 Adobe Acrobat PDF 時,通常會自動 Addin 所有已安裝的 Office 系列加入一個工具列和選單列方便 PDF 檔案進行輸出,但是往往我們只需要使用 Adobe PDF 所安裝的 PDF 虛擬印表機,然而無法移除或關閉 Office 系列的工具列和選單列,造成打開 Office 系列時載入延遲和版面不美觀。

            解決方式:

            1. 在開始->執行,鍵入 regedit
            2. 工具列->編輯->尋找 HKEY_CLASSES_ROOT\PDFMaker.OfficeAddin
            3. 將此機碼所有允許權限移除(即任何人不可存取此機碼)
            4. 完成

            注意事項:

            如果爾後要進行移除安裝的 Adobe Acrobat 時,必須將此機碼權限設定目前本機電腦帳號可完全控制的權限。

            2007年3月25日 星期日

            密碼回復工具


            下載

            軟體名稱:PasswordSpy
            軟體版本:v 1.0
            軟體作者:cuteofdragon
            軟體授權:免費軟體
            發佈時間:2007/03/25

            說明:有了這個工具,當記憶的密碼忘記時,但仍存在顯示在畫面上時,執行PasswordSpy後點擊Scan按鈕,然後將滑鼠移至密碼*號的位置,Password Text欄位立刻顯示遺失的密碼。支援中/英文Unicode密碼顯示。

            2007年3月20日 星期二

            動態網址解析概念


            下載

            軟體名稱:CNN 新聞資訊檢索
            軟體版本:v 1.0
            軟體作者:cuteofdragon
            軟體授權:免費軟體
            發佈時間:2007/03/20

            大綱

            1. 瀏覽網頁
            2. 取得標頭
            3. 原始內容
            4. 去除HTML標籤
            5. 正規表達式
            6. 資料儲存/回復


            瀏覽網頁

            新增WebBrowser元件
            webBrowser1.Navigate(textBox1.Text);



            取得標頭

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            ASCIIEncoding ascii = new ASCIIEncoding();
            headerTextBox.Text=ascii.GetString(response.Headers.ToByteArray());



            原始內容

            StreamReader sr = new StreamReader(response.GetResponseStream()、Encoding.Default);
            string content = sr.ReadToEnd();
            bodyTextBox.Text = content;



            去除HTML標籤

            Regex r = new Regex("<[^>]*>");
            string removeTag = r.Replace(content、"").
            Replace(" "、" ").
            Replace("\r"、" ").
            Replace("\n"、" ").
            Replace("\t"、" ");



            正規表達式

            HTML 標籤:<[^>]*>
            Hyperlink:<a href=""http://cnn.com[^<]*</a>
            Href:http://[^>""]*
            Text:>[^<]* Date:\d*\d 網址:http://search.cnn.com/pages/search.jsp? currentPage={0}&query=*&sortby=Date





            資料儲存/回復

            1.使用List儲存所有Hyperlink
            2.做用XmlDocument迭代輸出檔案
            3.對所有CNNHyperlinkTag物件建立XmlElement
            4.使用XmlDocument讀取檔案
            5.重建List




            CNNHyperlinkTag

            class CNNHyperlinkTag
            {
            public string Href;
            public string Text;
            public DateTime Date;
            public bool Visited;
            }



            XmlDocument 輸出

            XmlDocument doc = new XmlDocument();
            foreach (CNNHyperlinkTag tag in cnnHyperlinkTagList)
            {
            XmlElement element = doc.CreateElement("CNNHyperlinkTag");
            element.SetAttribute("Date"、tag.Date.ToString("d")); element.SetAttribute("Visited"、tag.Visited.ToString());
            ement.SetAttribute("Href"、tag.Href);
            element.SetAttribute("Text"、tag.Text);
            doc.DocumentElement.AppendChild(element);
            }
            doc.Save(fileName);




            XmlDocument 讀取

            XmlDocument doc = new XmlDocument();
            doc.Load(openFileDialog1.FileName);
            XmlNodeList xnl = doc.GetElementsByTagName("CNNHyperlinkTag");
            foreach (XmlElement data in xnl)
            {
            CNNHyperlinkTag tag = new CNNHyperlinkTag();
            tag.Date = DateTime.Parse(data.GetAttribute("Date"));
            tag.Visited = Boolean.Parse(data.GetAttribute("Visited"));
            tag.Href = data.GetAttribute("Href");
            tag.Text = data.GetAttribute("Text");
            cnnHyperlinkTagList.Add(tag);
            }


            原文下載

            網路組態設定工具


            下載

            軟體名稱:網路組態設定工具
            軟體版本:v 1.0
            軟體作者:cuteofdragon
            軟體授權:免費軟體
            發佈時間:2007/03/20

            使用方式 I:
            1. 選擇 Adapter(你欲設定的網路卡)
            2. 輸入 IP、Submask、Gateway、DNS
            3. 點選 SetIP 進行手動設定


            使用方式 II:

            1. 選擇 Adapter(你欲設定的網路卡)
            2. 點選 Auto 按鈕進行自動取得 IP


            使用方式 III(自動設定方式):

            當你使用行動電腦時,常常往返不同地方,有些網路設定須為自動取得 IP,有些則須設定固定 IP,但是網路卡只能接受其中一種方式的設定,不能進行快速的選擇,你可以參考下列方式進行網路卡設定,並存成批次檔,偶後即可快速的切換不同地方的網路設定組態。

            1. 在命令列模式(或批次檔)下自動取得 IP 鍵入:
              Win32_NetworkAdapterConfiguration.exe true
            2. 在命令列模式(或批次檔)下手動取得 IP 鍵入:(請自行替換你的 IP 位址)
              Win32_NetworkAdapterConfiguration.exe 10.1.1.1 255.255.255.0 10.1.1.254 168.95.1.1
              139.175.10.20