2012年12月24日 星期一

Google Site (協作平台) 留言板製作

    Google Site 到現在還是沒有提供留言的gadget,雖然他有一個"Comment"的回覆功能,中文稱"註解",但是需要使用google帳號,並且還要被加入到此Site權限中才可留言使用。

我們留言板需要的功能有
  1. 大家都看的到
  2. 可以匿名留言
  3. 不用自己架站
  4. 免費
在網路上我也只有找到用iframe + 免費留言版的方式加入至Google Site
以下為主要步驟
  1. tovery申請免費的留言板
  2. iframe教學加入iframe,並把留言板的網址加入進來即可

詳細步驟
未來將會詳細介紹...

2012年11月24日 星期六

什麼是margin與padding?


  • padding => 邊界內側到內容之間的留白,可以設定背景。
  • margin => 邊界外側區域。


例子
    以人的身體來比喻,骨頭就是區塊內容,皮膚就是邊框,肌肉是padding,人與人之間就是margin。


程式註解範例

HTML
<!-- 這是註解 -->
CSS
/* 這是註解 */
Javascript
// 單行註解
/* 多行註解 */
PHP
// 單行註解
/* 多行註解 */
C/C++
// 單行註解
/* 多行註解 */
Java
// 單行註解
/* 多行註解 */
Python
# 單行註解
''' 多行註解 '''

HTML 標籤介紹

HTML 大致分為<head>與<body>

  • <head> 描述文章標題等資訊,不會顯示在瀏覽器上。
  • <body> 描述顯示在瀏覽器上的內容。
  1. 在head標籤中,常用的標籤
    • <title> 指定網頁標題。
    • <meta> 指定網頁附加資訊(作者、關鍵字、簡介)。
    • <link> 指定網頁檔案之間的關係。
    • <script> 讀入腳本。一般為javascript,但也有phthon等script。
  2. 在body標籤中,常用的標籤
    • [區塊標籤]
      • <h1>~<h6> 標題。數字越小階層越高。
      • <p> 段落。用來指定構成一段文章的文字
      • <ul> 條列。
      • <li> 無順序之條列項目。
      • <ol> 有順序之條列項目。
      • <div> 把特定範圍內容指定為同一群組。
    • [內文標籤]
      • <a> 連結。
      • <br> 換行。
      • <img> 圖片。
      • <em> 強調。可強調任何文字。

標籤介紹

  • 右邊為連結範例 => <a href="www.google.com.tw">Google</a>
  • 解釋 =>
    • <a href="www.google.com.tw">Google</a> => 我們稱為"標籤"
    • <a href="www.google.com.tw"> => 開始標籤
    • </a> => 結束標籤
    • href => 屬性名稱
    • www.google.com.tw => 值
    • Google => 標籤內容










影像格式使用時機?


  1. 相片使用JPEG
  2. 單色Logo與簡單的圖案使用PNG或GIF
  3. 製作動畫用GIF
  4. 製作透明效果用PNG

2012年11月23日 星期五

Android 框架提供的功能概述


  • android.app : 提供高層的程式模型與基本的執行環境。
  • android.content : 包含各種裝置上的資料進行存取與發佈。
  • android.database : 透過內容提供者瀏覽和操作資料庫。
  • android.graphics : 底層的圖形函式庫,包含畫布、顏色過濾、點、矩形,可以將他們直接繪製到螢幕上。
  • android.location : 定位和相關服務的類別。
  • android.media : 管理多媒體、視訊的媒體介面。
  • android.net : 網路存取相關。
  • android.os : 提供系統服務、訊息傳輸和IPC個人電腦標準。
  • android.opengl : 提供OpenGL的工具。
  • android.provider : 存取Android內容提供者。
  • android.telephony : 打電話相關。
  • android.view : 使用者介面相關。
  • android.util : 工具性的方法。例如時間日期的操作。
  • android.webkit : 預設瀏覽器操作介面。
  • android.widget : 提供各種UI元素,在應用程式的版面沛置中使用。

2012年11月19日 星期一

php 如何關閉錯誤訊息

<?php 
// 關閉錯誤訊息
error_reporting(0);

// 報告所有錯誤
error_reporting(-1);

// 報告所有錯誤(see changelog)
error_reporting(E_ALL);

// 報告執行期間的錯誤
error_reporting(E_ERROR | E_WARNING | E_PARSE);

// 報告除了Notice之外的錯誤
error_reporting(E_ALL ^ E_NOTICE);
?>

php 可變動函式

    可變動函式(variable function)是指我們可以動態設定函式的名稱,簡單來說,當我們的變數後面有()時,php就會去找出對應的function來執行。

<?php
    function Afunc($a) {
        echo "我是A".$a;
    }
    function Bfunc($b) {
        echo "我是B".$b;
    }

    $func = 'Afunc';
    $func(100);
    $func = 'Bfunc';
    $func(1);
?>

php 錯誤控制運算子 @

當我們在運算式前加入錯誤控制運算子 @ 時,運算是所可能產生的錯誤訊息就會被忽略。

<?php
    $f = @file("C:\helloworld.php");
?>

當C:\helloworld.php不存在時,正常情況下會有錯誤訊息。但是有 @ 就不會有!

ps:@ 不能放在函式定義、類別定義或流程控制等敘述的前面。

2012年8月13日 星期一

學長的正規表示法測試頁

此為記錄學長寫的網頁,協助正快使用正規
原本連結網址 http://140.134.26.7/~ma/re.htm
以下輸入不方便是正常的,有空再改進....

另外一個可以測試javascript的網頁
http://jsfiddle.net/

RegExp Tester for JavaScript RegExp:
Replace Regular Expression Reference
Control New Line String:
Result:

2012年8月7日 星期二

zxing 問題

今天在使用zxing時發生一些問題,在此記錄問題與解決方法
  1. Failed to install *.apk on device *: timeout
  2. 好吧,其實第一個和zxing沒關係,但是我還是記錄一下
    http://stackoverflow.com/questions/4775603/android-error-failed-to-install-apk-on-device-timeout
    http://http://www.cnblogs.com/not-code/archive/2011/05/20/2052211.html

  3. Caused by: java.lang.NoClassDefFoundError:com.google.zxing.ResultMetadataType http://blog.sina.com.cn/s/blog_67d95f400100z9f4.html

  4. case R.id.auto_focus: "case expressions must be constant expressions" 在CaptureActivityHandler.java 
  5. 把那些switch case 改成 if else就行拉!

2012年8月6日 星期一

php 變數的變數 $$變數 ( $$var )

一般來說php的變數我們都知道怎麼寫
<?php $temp = 1; ?>
但是今天我看到了
<?php $$temp = 1; ?>
神奇吧!
其實有人說一下就可以很容易理解,看一下範例
<?php
$temp = 'a';
$$temp = 1; 
echo $$temp;    // 1
echo $a;    // 1
?>
所以我們知道變數是可以取代的
那再多個$的話呢?
<?php
$temp = 'bb';
$$temp = 'a';
$$$temp = 1; 
echo $bb;    // a
echo $$bb;   // 1
echo $a;     // 1
?>
感覺有種變數被替換的感覺
雖然這個很神奇,但要慎用,因為不好讀啊!

後來發現原來別人有寫,只是我不知道有此關鍵字 : php 變數的變數



2012年7月26日 星期四

什麼是雲端計算?

What is cloud computing?
相信是很多人都抱持著疑問,以下是我對雲端計算定義的搜尋記錄。
==============================================================

定義

    Cloud computing is a model for enabling ubiquitous, convenient, on-demand network access to a shared pool of configurable computing resources (e.g., networks, servers, storage, applications, and services) that can be rapidly provisioned and released with minimal management effort or service provider interaction. 
    This cloud model is composed of five essential characteristics, three service models, and four deployment models.

     雲端計算是一種模式,無論在何時、何地,當需要時可以透過網路方便存取一個共享的計算資源(如:網路、伺服器、應用程式、與各種服務),並用最少的管理或動作可以快速的配置和發布。

     所以在這裡提出雲端計算有5個基本特徵、3個服務模式、4個建置模式


5個基本特徵、3個服務模式、4個建置模式

Essential Characteristics 五個基本特徵:
  • On-demand self-service 隨需自助服務
    • 客戶可以依其需求索取計算資源(例如伺服器或儲存空間),且整個過程是單方面自動化的,無須與資源提供者互動。
  • Broad network access 廣泛的網絡接入
    • 服務是經由網路提供,且有標準機制能讓不同的客戶端平台(如智慧型手機及筆電等)都可以使用。
  • Resource pooling 共享資源池
    • 服務者所提供的計算資源,例如儲存空間、網路頻寬、計算能力、虛擬機器數量等,可類比為一個大水池,能隨時依需要(重新)分配給不同平台的多個使用者。使用者不需了解資源的實體位置,只要有抽象概念即可(如資源是在哪個國家或哪個資料中心) 
  • Rapid elasticity 快速彈性
    • 計算資源不僅可以快速且有彈性地被提供或釋放,且對客戶而言,資源是取之不盡且可以恣意購買的。 
  • Measured Service 測量服務
    • 計算資源可依其所提供的服務特性被自動控管及最佳化。提供者與使用者雙方都可透明地監控資源使用情形。

Service Models 三個服務模式:
  • Cloud Software as a Service (SaaS) 
    • 雲端軟體即服務 : 軟件服務供應商,以租賃的概念提供客戶服務 。(一個軟體不同人用)
    • ex : Gmail、Saleforce CRM
  • Cloud Platform as a Service (PaaS) 
    • 雲端平台即服務: 讓開發人員建立雲端應用程式與服務 
    • ex : Google App Engine、MS Azure
  • Cloud Infrastructure as a Service (IaaS) 
    • 雲端架構即服務:“使用才付費”的模式,IaaS的供應商是透過虛擬化提供幾乎無限的客戶端服務,使承載的硬體效益更高。 (簡稱賣機器)
    • ex : Amazon EC2  、OpenStack

    Deployment Models 四種建置模式:
    • Private cloud 私有雲端
      • 自行架設的雲端服務,只提供給特定族群使用。
    • Community cloud 社群雲端 
      • 指由多個組織共享資源池,故較合適具共享研究資料需求的學研單位合資建置 。
    • Public cloud 公用雲端
      • 公共雲端服務,全世界的客戶都可使用。
    • Hybrid cloud 混合雲端
      • 泛指混合了上述三種雲端型態,須基於標準或運用新技術來確保資料與應用程式在不同平台間的移植性。

    參考
    1. The NIST Definition of Cloud Computing, Authors: Peter Mell and Tim Grance, Version 15, 10-7-09
    2. 雲端運算之定義Cloud computing is a model for en
    3. 雲端運算是什麼?
    4. e化部落雲端服務架構_IAAS/PAAS/SAAS
    5. 臺大觔斗雲服務之五、四、三
    6. 工業技術研究院- 雲端中心組織

    2012年5月12日 星期六

    d153: 六、智力测验

    內容 :
        在Z先生的牧场中,做一头“光明的奶牛”不仅要称体重,还需要考智力。一年一度的智力测验要求极为严格,大约只有一半的奶牛可以通过。则于参加考试的奶牛数量众多,因此如何    划定智力测验“通过线”令Z先生头痛不已,于是他请你解这一难题。
        每只参加测验的奶牛都会得到一个分数(从0到100的整数),将所有的成绩按从高到低的顺序排好后,处在中间位置的分数将会作为“参考分数”提供给Z先生,以便让他决定“通过线”。如果参加测验的奶牛的数目是偶数的话,处于中间的位置的分数将会有两个,此时“参考分数”是其中较小的一个。

    輸入說明 :
        输入第一行是一个整数T(1 <= T <= 100),表示测试数据的总数。
        每组测试数据的第一行是一个整数N(1 <= n <= 40000),表示参加测验的奶牛的数目。以下的N行依次给出N只奶牛测验的成绩,每行有一个0至100的正整数。

    輸出說明 :
        每组测试数据都输出一个答案,输出“参考分数”。

    範例輸入 :
    1
    6
    97
    45
    78
    62
    81
    79

    範例輸出 :
    78

    程式碼 :
    #include <stdio.h>
    
    void swap(int *a, int *b)
    {
        int c;
        c = *a;
        *a = *b;
        *b = c;
    }
    
    int partition(int arr[], int left, int right) 
    {     
        int i, j, s;
        s = arr[right];
        i = left - 1;
         
        for(j = left; j < right; j++)
        {
            if(arr[j] > s)
            {
                i++;
                swap(&arr[i], &arr[j]);           
            }
        }
    
        swap(&arr[i+1], &arr[right]);
        return i+1;
    }
    
    void quicksort(int arr[], int left, int right) 
    {     
        int q;     
        
        if(left < right) 
        {         
            q = partition(arr, left, right);         
            quicksort(arr, left, q-1);         
            quicksort(arr, q+1, right);     
        } 
    }
    
    
    int main(void) 
    {
        int i, n, times, arr[40000];
        
        scanf("%d",&times);
        while(times--)
        {
            scanf("%d",&n);
            
            for(i=0; i<n; i++)
                scanf("%d",&arr[i]);
                
            quicksort(arr, 0, n-1);
                    
            printf("%d\n",arr[n/2]);        
        }
        
        return 0;
    }
    



    http://zerojudge.tw/ShowProblem?problemid=d153

    d124: 3的倍数

    內容 :
        20XX年,pascal語言有多了一種新的整型int128。它能够運算10000位的超大數據。
        今天我們的任務就是:輸入一个類型為int128的數字n(-10^10001 <= n <= 10^10001)。
        判斷它是否為3的倍數。

    輸入說明 :
        輸入檔中有多个數據,每組數據占一行,是輸入的數 n 。

    輸出說明 :
        輸出 n 是否为3的倍數。
        若是,輸出yes;若不是,輸出no。

    範例輸入 :
    3
    -7
    0

    範例輸出 :
    yes
    no
    yes

    程式碼 :
    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
        int i, len, sum, isminus;
        char s[10020];
        
        while(scanf("%s",s)==1)
        {
            if(s[0] == '-')
                isminus = 1;
            else
                isminus = 0;
            
            sum = 0;
            len = strlen(s);
            
            for(i=isminus; i<len; i++)
                sum += s[i] - '0';
            
            if(sum % 3 == 0)
                printf("yes\n");
            else
                printf("no\n");
        }
        
        return 0;
    }
    



    http://zerojudge.tw/ShowProblem?problemid=d124

    a289: Modular Multiplicative Inverse

    內容 :
        一整數a 對模數n之模反元素是指滿足以下公式的整數b

        a-1 ≡ b        (mod n)

        也可以寫成以下的式子

        ab ≡ 1        (mod n)

        現在給定兩個數字a,n,求一個最小正整數b,若不存在則輸出”No Inverse”

    輸入說明 :
        有多筆測資,每組第一行有兩個數字a,n,(1 ≦ a,n ≦ 100,000,000)

    輸出說明 :
        一個最小正整數 b,若不存在則輸出” No Inverse”

    範例輸入 :
    79 62
    96 47
    49 28

    範例輸出 :
    11
    24
    No Inverse

    程式碼 :
    #include<stdio.h>
    
    int main()
    {
        int a, n, quotient, remainder, temp_a, temp_b, temp_c, temp_n;
        
        while(scanf("%d%d",&a,&n)==2)
        {
            if(n == 1)
            {
                printf("No Inverse\n");
                continue;
            }
            
            temp_n = n;
            temp_a = 0;
            temp_b = 1;
            temp_c = 1;
            
            while(1)
            {
                quotient = temp_n / a;
                remainder = temp_n % a;
                if(remainder == 0)
                {
                    if(a == 1)
                        printf("%d\n",temp_c<0?(temp_c+n):temp_c);
                    else
                        printf("No Inverse\n");
                    break;
                }
                temp_n = a;
                a = remainder;
                
                temp_c = (temp_a - quotient*temp_b) % n;
                
                temp_a = temp_b;
                temp_b = temp_c;
            }
        }
        
        return 0;
    }
    



    http://zerojudge.tw/ShowProblem?problemid=a289

    2012年5月2日 星期三

    a282: 認真念書

    內容 :
        我最喜歡念書了!
        2000頁的課本耶!
        我下一頁應該要念哪一頁呢QQ

    輸入說明 :
        多組輸入以EOF結束
        每組輸入一開始有一個數字n(0 <= n <= 1000)代表你以前看過幾頁(可能重複)
        接下來n個1~2000的正整數代表你看過哪幾頁

    輸出說明 :
        一個數字,代表你下一頁應該看哪一頁
        也就是這本書裡面第一頁你沒看過的

    範例輸入 :
    5
    1 3 4 5 6
    4
    1 2 3 4
    5
    2 3 4 5 6

    範例輸出 :
    2
    5
    1

    程式碼 :
    #include <stdio.h>
    
    int main(int argc, const char * argv[])
    {
        int i,n,temp,arr[2001];
    
        while (scanf("%d",&n)==1) {
    
            for (i=1; i<2001; i++)
                arr[i] = 0;
    
            for (i=0; i<n; i++) {
                scanf("%d",&temp);
                arr[temp] = 1;
            }
            for (i=1; arr[i]==1; i++);
            printf("%d\n",i);
        }
        return 0;
    }
    



    http://zerojudge.tw/ShowProblem?problemid=a282

    2012年4月6日 星期五

    Android in mac 環境

    此篇為記錄文章,下次遇到同樣的問題就不用再找了

    找了好久終於找到下面這個網站,教的很詳細
    在mac建置android環境
    http://wiki.cyanogenmod.com/wiki/Howto:_Install_the_Android_SDK

    途中遇到了 排除匯入時的Unable to resolve target錯誤
    http://note.blogger.idv.tw/70.html

    2012年4月4日 星期三

    zerojudge 目錄

    基礎題庫
    a001 a002 a003 a004 a005 a006 a007 a008 a009 a010 a011 a012 a013 a015 a016 a017 a020 a021 a022 a024 a032 a034 a038 a040 a042 a044 a053 a054 a058 a059 a065 a104 a121 a141 a147 a148 a149 a160 a215 a216 a224 a225 a228 a229 a244 a248 a263 a271 a272 a289 a290 a291 a410 a414 a417 d010 d016 d017 d018 d049 d050 d051 d058 d059 d060 d063 d064 d065 d066 d067 d068 d069 d070 d071 d072 d073 d074 d086 d098 d102 d114 d115 d119 d122 d124 d166 d170 d171 d212 d244 d264 d277 d287 d299 d326 d392 d460 d461 d462 d465 d466 d467 d468 d471 d473 d475 d478 d483 d485 d489 d490 d491 d493 d498 d499 d506 d507 d511 d525 d526 d527 d532 d540 d541 d550 d555 d559 d561 d562 d563 d566 d573 d574 d575 d583 d584 d586 d587 d623 d625 d626 d634 d635 d636 d637 d639 d643 d644 d645 d646 d649 d652 d681 d693 d705 d709 d710 d715 d732 d827 d872 d881 d984 d985

    競賽題庫
    a227 a240 a241 b001 b002 b003 b004 b005 b006 b050 b051 b052 b053 b054 b055 b056 b058 b059 b060 b061 b062 b063 b064 b065 b066 b067 b108 b109 b110 b111 b112 b113 b119 b120 b121 b122 b123 b124 b125 b127 b128 b172 b173 b174 b175 b176 b177 b178 b179 b180 b181 b182 b183 b184 b185 b186 b187 b188 b189 b190 b216 b217 b218 b219 b220 b221 b234 b235 b236 b237 d084 d126 d127 d128 d139 d140 d141 d153 d164 d165 d227 d231 d232 d233 d249 d250 d251 d252 d358 d369 d370 d371 d372 d373 d374 d429 d430 d431 d432 d451 d452 d453 d454 d482 d501 d502 d503 d504 d534 d535 d536 d537 d544 d545 d546 d547 d548 d596 d597 d598 d599 d600 d601 d613 d648 d665 d784 d785 d786 d787 d814 d874 d887 d889 d890 d905 d906 d907 d908 d913 d914 d915 d916 d917 d918

    NPSC
    b013 b014 b015 b016 b017 b018 b019 b020 b021 b022 b023 b024 b025 b026 b027 b028 b029 b030 b031 b032 b033 b034 b035 b036 b037 b038 b039 b040 b041 b042 b043 b045 b046 b047 b048 b049 b069 b070 b071 b072 b073 b074 b075 b076 b077 b078 b079 b080 b081 b082 b083 b084 b085 b086 b087 b088 b089 b090 b091 b092 b093 b094 b095 b096 b097 b098 b099 b100 b101 b102 b103 b104 b105 b106 b107 b196 b197 b198 b199 b200 b201 b202 b203 b204 b205 b206 b207 b208 b209 b210 b211 b212 b213 b214 b215 b222 b223 b224 b225 b226 b227 b228 b238 b239 b240 b241 b242 b243 b244 b245 b246 b249 b250 b251 b252 b253 b254 b255 b256 b257 b258 b259 d210 d377 d588 d589 d590 d591 d592 d593 d594 d929 d930 d931 d932 d933 d934 d943 d944 d945 d946 d947 d948 d949 d950 d951 d952 d953 d954 d955 d956 d961 d962 d963 d964 d965 d966 d967

    TOI/NOI
    a019 a055 a056 a066 a067 a069 a070 a071 a072 a074 a077 a078 a079 a080 a081 a082 a083 a084 a085 a086 a087 a088 a089 a090 a092 a093 a094 a124 a126 a127 a137 b114 b115 b116 b117 b118 b130 b131 b132 b133 b134 b135 b136 b137 b138 b139 b140 b141 b142 b143 b144 b145 b146 b147 b148 b149 b150 b151 b152 b153 b158 b159 b160 b161 b162 b163 b164 b165 b229 b230 b231 b232 b233 d103 d104 d105 d106 d107 d108 d109 d110 d203 d229 d230 d234 d298 d354 d356 d357 d445 d603 d605 d606 d607 d608 d609 d610 d611 d612 d682 d773 d774 d775 d776 d777 d778 d779 d780 d801 d835 d836 d837 d838 d839 d840 d841 d842 d844 d849 d850 d851 d852 d853 d854 d855 d856 d858 d859 d860 d861 d862 d868 d869 d870 d871 d880 d892 d893 d894 d895 d899 d900 d901 d902 d904 d911 d912 d998

    UVa 題庫
    a111 a130 a131 a132 a133 a134 a168 c001 c002 c004 c005 c006 c007 c009 c010 c012 c013 c014 c015 c022 c024 c031 c032 c033 c034 c036 c039 c044 c045 c048 c049 c050 c054 c055 c060 c061 c067 c069 c073 c074 c077 c079 c081 c082 c083 c084 c085 c086 c087 c088 c089 c091 c092 c093 c094 c095 c096 c098 c099 c100 c101 c102 c103 c104 c105 c106 c107 c108 c109 c110 c111 c112 c113 c114 c115 c116 c117 c119 c120 c121 c122 c123 c124 c125 c126 c127 c128 c129 c130 c131 c132 c133 c134 c135 c139 d038 d039 d040 d041 d042 d043 d044 d045 d047 d048 d052 d053 d054 d055 d056 d057 d087 d088 d089 d091 d093 d094 d095 d096 d097 d111 d117 d120 d121 d123 d129 d130 d131 d132 d133 d134 d135 d142 d143 d150 d154 d174 d182 d183 d186 d187 d188 d189 d190 d191 d192 d193 d194 d195 d196 d197 d198 d206 d207 d217 d219 d221 d222 d223 d224 d226 d235 d242 d253 d255 d256 d258 d260 d261 d263 d265 d267 d268 d269 d270 d271 d272 d273 d275 d279 d281 d282 d285 d286 d292 d306 d307 d318 d324 d329 d335 d341 d343 d347 d351 d352 d361 d362 d364 d365 d366 d368 d375 d379 d380 d385 d386 d387 d389 d390 d394 d395 d396 d397 d404 d412 d417 d418 d419 d420 d421 d423 d424 d436 d437 d438 d439 d440 d441 d442 d443 d524 d542 d656 d658 d659 d660 d663 d664 d666 d667 d669 d670 d671 d672 d673 d674 d686 d691 d729 d731 d733 d750 d751 d756 d757 d759 d760 d762 d764 d766 d768 d771 d781 d782 d783 d789 d790 d791 d792 d793 d795 d797 d813 d873 d879 d882 d898

    原創/不分類題庫
    a014 a048 a063 a064 a068 a073 a091 a129 a144 a146 a156 a163 a164 a165 a167 a168 a169 a170 a171 a172 a174 a175 a176 a181 a186 a190 a191 a218 a219 a276 d075 d085 d092 d118 d125 d137 d155 d156 d157 d167 d173 d177 d180 d199 d201 d202 d209 d213 d214 d218 d228 d236 d237 d238 d239 d243 d246 d262 d266 d276 d280 d283 d284 d288 d289 d290 d291 d294 d295 d296 d297 d304 d308 d309 d311 d312 d313 d314 d315 d316 d323 d328 d330 d334 d336 d337 d353 d359 d360 d363 d367 d378 d382 d400 d401 d402 d406 d407 d408 d411 d416 d422 d425 d427 d434 d444 d446 d448 d456 d458 d459 d463 d472 d476 d477 d479 d480 d481 d486 d487 d512 d517 d518 d522 d533 d539 d543 d549 d552 d564 d569 d572 d576 d577 d578 d579 d580 d581 d614 d615 d618 d619 d621 d624 d627 d632 d633 d640 d647 d650 d653 d655 d668 d688 d692 d702 d703 d704 d708 d712 d713 d716 d717 d718 d730 d734 d735 d739 d741 d747 d763 d767 d769 d788 d794 d796 d798 d799 d800 d804 d806 d807 d808 d809 d810 d815 d816 d817 d821 d822 d825 d826 d828 d830 d831 d832 d847 d875 d885 d903 d909 d910 d919 d920 d923 d925 d978 d990

    d583: 幼稚的企鵝

    內容 :
        小企鵝總是天真可愛,但擺脫不了幾分幼稚。
        現在企鵝幼稚園的企鵝老師要小企鵝任意排隊。
        而小企鵝們卻很堅持要照老師給他們的座號來排隊,
        偏偏有的小企鵝就是會忘記自己的座號亂排,
        於是可以想見的是一群短鳥喙的小企鵝爭吵互啄的景象了…

    輸入說明 :
        本題有2個測資點,每個50分,每個測資點有多組測資。
        每組測資的第一行有整數n(1<=n<=100000)代表有幾隻企鵝。
        第二行則有n個數字的數列代表每隻企鵝的座號,並且座號必定有1~n不重覆。

    輸出說明 :
        請由小到大輸出已經排序的數列。

    範例輸入 :
    10
    9 5 10 4 3 6 1 2 7 8
    30
    30 29 28 27 26 25 10 11 12 13 15 14 16 19 18 17 20 24 23 22 21 8 9 7 6 5 3 4 2 1

    範例輸出 :
    1 2 3 4 5 6 7 8 9 10
    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

    程式碼 :
    #include<stdio.h>
    
    int main()
    {
        int i, n, temp;
        
        while(scanf("%d ",&n)==1)
        {        
            n++;
            for(i=1; i<n; i++)
            {
                scanf("%d",&temp);
                printf("%d ",i);
            }
            printf("\n");
        }
        return 0;
    }
    



    http://zerojudge.tw/ShowProblem?problemid=d583

    a111: 12149 - Feynman

    內容 :
        費曼 (Richard Phillips Feynman) 是一個有名的美國物理學家及諾貝爾物理獎得主。他主攻理論物理並倡導量子電腦。他曾訪問南美十個月,在那兒演講並享受熱帶生活。他的成名作「別鬧了,費曼先生」及「你管別人怎麼想」中也包含了他在赤道以南的經歷。

        他一生的嗜好是解及建立謎題、鎖、及密碼。最近,曾在1949年接待費曼的一位南美老農夫找到一些據信屬於這位年輕物理學家的筆記。在這些有關介子及電磁學的筆記中,夾有一張餐巾紙,上寫有個簡單的謎題:「在一個 N ×N 的方格中含有幾個不同的正方形?」
    下面重現了該餐巾紙上的圖,顯示 N=2 時答案為 5。



    輸入說明 :
        輸入有若干筆測資,每筆一行,含有一個整數 N,代表方格的邊長 (1 ≤ N ≤ 100)。
        輸入的結束以含有一個零的一行表示。

    輸出說明 :
        對於每筆測資,你的程式須輸出該筆測資一共包含幾個不同的正方形於一行。

    範例輸入 :
    2
    1
    8
    0

    範例輸出 :
    5
    1
    204

    出處 :
    UVa ACM 12149

    程式碼 :
    #include<stdio.h>
    
    int main()
    {
        int i, n;
        long long arr[101]={0};
        
        for(i=1; i<101; i++)
            arr[i] += i*i + arr[i-1];
        
        while(scanf("%lld",&n)==1)
        {
            if(n == 0)
                break;
            printf("%lld\n",arr[n]);
        }
    
        return 0;
    }
    


    http://zerojudge.tw/ShowProblem?problemid=a111

    d098: Stringstream運用練習(C++)

    內容 :
        小明為了要保證資料傳輸的隱密性,為檔案設置了一個加密金鑰,並且將金鑰藏進了一個檔案裡。收到檔案的小風得知要解譯出他所使用的加密金鑰,必須將檔案裡所有不含非數字的單字找出,加起來就是加密金鑰。可是,要求出這個金鑰,如果自己慢慢加實在是太慢了,所以請你寫一個程式來幫助他吧!

    輸入說明 :
        每組測資有一行,內含多個單字,每個單字之間會以空格作分隔(每一行的前後都有可能有空格,且分隔單字的空格可能不只一個)。

    輸出說明 :
        請求出所有僅含數字的單字,並且加總後輸出。這些數字的總和不會超過2的16次方。

    範例輸入 :
    zerojudge萬歲
    1a6f 6 65afd 15s 1sa 12 115

    範例輸出 :
    0
    133

    程式碼 :
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    void isword(char word[], int *sum)
    {
        int i,len;
        
        len = strlen(word);
        
        for(i=0; i<len; i++)
            if('0' > word[i] || word[i] > '9')
                break;
        if(i == len)
            *sum += atoi(word);
    }
    
    int main()
    {
        int i, j, k, sum = 0, len, len_word;
        char s[5000], check, word[1000];
        
        while(gets(s) != NULL)
        {
            len = strlen(s);
            
            for(i=k=0; i<len; i++)
            {
                if(s[i] == ' ')
                {
                    word[k] = '\0';
                    isword(word, &sum);
                    k = 0;
                }
                else
                    word[k++] = s[i];
            }
            
            word[k] = '\0';
            isword(word, &sum);
                    
            printf("%d\n",sum);
            sum = 0;
        }
        
        return 0;
    }
    



    http://zerojudge.tw/ShowProblem?problemid=d098

    d038: 900 - Brick Wall Patterns

    內容 :
        如果我們要用常見的長度為高度兩倍的磚塊建一道磚牆,並且牆的高度為兩個單位,根據牆的長度,我們可以建出不同數量的花樣。從圖一我們可以看出:
                                                   

    •     寛度為 1 單位的牆只有一種花樣—就是讓磚塊直立。
    •     長度為 2 的牆有 2 種花樣—兩個平躺的磚磈疊在一起以及兩個直立的磚塊併在一起。
    •     長度為 3 的牆有三種花樣。

        長度為 4 的牆你可以找出幾種花樣?那長度為 5 的牆呢?

        問題
        你的工作是要寫一個程式,給它牆的長度,它就算出這道牆可以有幾種花樣。

    輸入說明 :
        你將程式會收到一連串的整數,一行一個,每個整數代表牆的長度。牆的最大長度為 50。

    輸出說明 :
        對於每個輸入的牆長度,你要輸出這道牆的花樣數量,每個數字單獨一行。

    範例輸入 :
    1
    2
    3
    0

    範例輸出 :
    1
    2
    3

    提示 :
        背景知識: DP

    出處 :
        UVa ACM 900

    程式碼 :
    #include <stdio.h>
    
    int main(void) 
    {
        int i, n;
        long long arr[51];
        
        arr[1] = 1;
        arr[2] = 2;
        for(i=3; i<51; i++)
            arr[i] = arr[i-1] + arr[i-2];
        
        while(scanf("%d",&n)==1)
        {
            if(n == 0)
                break;
            
            printf("%lld\n",arr[n]);
        }
        
        return 0;
    }
    

    http://zerojudge.tw/ShowProblem?problemid=d038

    2012年4月3日 星期二

    d378: 最小路徑

    內容 :
        現在有一張地圖,凡是走過某一個格子,都會消耗體力,所以請你找出最少消耗體力值。
        現在老鼠在地圖的左上角,在走的時候時,所以只能往右或下走,之後要走到右下角,
        走過的點上的數字必須加總,請輸出加總的數字最小的。

        測資一 :
        0 7 8 9
        1 5 1 1
        2 4 10 0

        可以走 0 → 7 → 8 → 9 → 1 → 0       SUM = 7 + 8 +9 + 1 = 25
                     0 → 1 → 5 → 1 → 1 → 0       SUM = 1 + 5 + 1 + 1 =8
                     0 → 7 → 8 → 1 → 10 → 0     SUM = 7 + 8 + 1 + 10 = 26
    .
    .
        以此類推,只輸出最小值 8

        " 左上角跟右下角必為 0 "

    輸入說明 :
        輸入的每第一行會有兩個數字 N, M ( 2 ≦ N , M ≦ 101)
        之後會有 N 行,每行上會有 M 個數字 G ( 1 ≦ G ≦ 20 )

    輸出說明 :
        對每組地圖先輸出 "Case #%d :"
        輸出從左上走到右下最少的體力消耗

    範例輸入 :
    3 4
    0 7 8 9
    1 5 1 1
    2 4 10 0
    2 2
    0 1
    1 0

    範例輸出 :
    Case #1 :
    8
    Case #2 :
    1

    提示 :
    DP

    程式碼 :
    #include<stdio.h>
    
    int main()
    {
        int i,j,n,m,count;
        int map[101][101];
        
        count = 1;
        while(scanf("%d%d",&n,&m)==2)
        {
            for(i=0; i<n; i++)
                for(j=0; j<m; j++)
                    scanf("%d",&map[i][j]);
            
            for(i=1; i<n; i++)
                map[i][0] += map[i-1][0];
            
            for(j=1; j<m; j++)
                map[0][j] += map[0][j-1];
            
            for(i=1; i<n; i++)
                for(j=1; j<m; j++)
                {
                    if(map[i-1][j] > map[i][j-1])
                        map[i][j] += map[i][j-1];
                    else
                        map[i][j] += map[i-1][j];
                }
            
            printf("Case #%d :\n%d\n",count++,map[n-1][m-1]);
        }
        
        return 0;
    }
    



    http://zerojudge.tw/ShowProblem?problemid=d378

    d632: C and S ??

    內容 :
        有一天,小明在網路上看到一種神奇的魔法
        根據小明的推測,這種魔法似乎是一種數學布林函數
        這個函數是長這樣的:

        輸入部分:
            A、B和C
        輸出部分:
            S 和 C'

        S = A xor B xor C
        C' = (A and B) or (B and C) or (C and A)
        小明將好多個這種函數當成丸子般串起來

        並且把兩個布林數列代進去
        神奇的事情發生了...
        當A為0010
            B為0011
        所得到的S數列竟然是0101!!!
        //==================
        小明今天想做實驗,看看代入不同的A和B,所得到的S數列是長什麼樣子

    輸入說明 :
        給定兩個數列A和B(AB兩者長度皆為32)

    輸出說明 :
        S數列

    範例輸入 :
    00000000000000000000000000001100
    00000000000000000000000000001101

    範例輸出 :
    00000000000000000000000000001100
    00000000000000000000000000001101
    ---------------------------------
    00000000000000000000000000011001
    ****End of Data******************

    程式碼 :
    #include<stdio.h>
    
    int main()
    {
        int i,carry;
        char a[33],b[33],s[33];
        char line[34] = "---------------------------------";
        char end[34] = "****End of Data******************";
        
        while(scanf("%s%s",a,b)==2)
        {
            for(i=0; i<32; i++)
            {
                a[i] -= '0';
                b[i] -= '0';
            }
            
            carry = 0;
            for(i=31; i>-1; i--)
            {
                s[i] = a[i] ^ b[i] ^ carry;
                carry = (a[i] & b[i]) | (b[i] & carry) | (a[i] & carry);
            }
            s[32] = '\0';
            
            for(i=0; i<32; i++)
            {
                a[i] += '0';
                b[i] += '0';
                s[i] += '0';
            }
            printf("%s\n%s\n%s\n%s\n%s\n", a, b, line, s, end);
        }
        
        return 0;
    }
    


    http://zerojudge.tw/ShowProblem?problemid=d632

    d807: 方方

    內容 :
        在一個遙遠的國度裡,每個村莊都是長方型的,雖然有時候會很不方便
        但是大家還是過著快樂的日子。直到有一天,有個異地來的軍隊,想要佔領各個村莊
        他們佔領的方式是,從村莊裡頭,切出一個儘可能大的正方形,先佔為己有
        隔日,在從未佔領的部分,重複這樣的動作。
        直到某一天,未佔領的部分為一個正方形的時候,就結束佔領的動作。
        現在我們想知道,最後的那一個正方形是多大?(見圖)
     

    輸入說明 :
        給定兩個正整數 n,m 表示村莊的長寬。n,m皆介於 1 ~ 10^9
        包含多筆測試資料。

    輸出說明 :
        輸出,最後的正方形大小

    範例輸入 :
    5 5
    2 1
    2 2
    10 5
    13 9

    範例輸出 :
    5
    1
    2
    5
    1

    PS : 最大公因數

    程式碼:
    #include<stdio.h>
    
    int main()
    {
        int m,n;
        
        while(scanf("%d%d",&m,&n)==2)
        {
            if(m < n)
                m ^= n ^= m ^= n;
            while((m = (m % n)) != 0)
            {
                m ^= n ^= m ^= n;
            }
            printf("%d\n",n);
        }
        
        return 0;
    }
    




    http://zerojudge.tw/ShowProblem?problemid=d807

    2012年3月10日 星期六

    a417: 螺旋矩陣

    內容 :
    輸出一螺旋矩陣。

    輸入說明 :
    每行有一正整數T,代表有幾組測試資料
    接下來有T行, 每行有N、M兩正整數
    N為矩陣長寬,就是會有N*N矩陣
    M為方向,M=1為順時鐘,M=2為逆時鐘
    N範圍為1~100之間

    輸出說明 :
    把矩陣輸出,矩陣值之間寬度為5,就是[00000]寬度
    C++可用setw(5)或C的%5d輸出

    範例輸入 :
    2
    3 1
    2 2

    範例輸出 :
    1 2 3
    8 9 4
    7 6 5

    1 4
    2 3

    程式碼 :
    #include<stdio.h>
    #include<stdlib.h>
    
    int main()
    {
        int i,j,t,n,m,x,y,loop,times,mode,count;
        int pathx[4] = {1,0,-1,0};
        int pathy[4] = {0,-1,0,1};
        
        while(scanf("%d",&t)==1)
        {        
            while(t--)
            {
                scanf("%d%d",&n,&m);
                
                int **arr = (int**)malloc(sizeof(int *) * n);
                for(i=0; i<n; i++)
                    arr[i] = (int*)malloc(sizeof(int) * n);
                
                count = 0;
                loop = (n-1) * 2;
                times = n;
                mode = 0;
                if(m == 1)
                {
                    x = 0;
                    y = -1;
                    for(i=0; i<n; i++)
                    {
                        y = y + 1;
                        arr[x][y] = ++count;
                    }
                }
                else
                {
                    x = -1;
                    y = 0;
                    for(i=0; i<n; i++)
                    {
                        x = x + 1;
                        arr[x][y] = ++count;
                    }
                }
                for(i=0; i<loop; i++)
                {
                    if(i%2 == 0)
                        times--;
                    for(j=0; j<times; j++)
                    {
                        if(m == 1)
                        {
                            x = x + pathx[mode];
                            y = y + pathy[mode];
                        }
                        else
                        {
                            x = x + pathy[mode];
                            y = y + pathx[mode];
                        }
                        arr[x][y] = ++count;
                    }
                    mode = (mode+1) % 4;
                }            
                
                for(i=0; i<n; i++)
                {
                    for(j=0; j<n; j++)
                        printf("%5d",arr[i][j]);
                    printf("\n");
                }
                if(t != 0)
                    printf("\n");
            }
        }        
        return 0;
    }
    


    http://zerojudge.tw/ShowProblem?problemid=a417

    a410: 解方程

    內容 :
        話說同學們正在學習二元一次方程式。
        二元一次方程式的練習題鋪天蓋地地用向同學們,同學們正苦惱於一次次的四則運算、移        項、合併同類項等等。
        他們知道你很聰明,想請你幫他們編一個解二元一次方程式的程式。
        我們假定二元一次方程式的一般格式如下;(a,b,c,d,e,f為長數,x,y為未知數)
            ax+by=c
            dx+ey=f
        程式讀入a,b,c,d,e,f後,輸出解。
        當然,方程式也有可能存在無解或有無窮解的情况:如果(x,y)没有相對應的實數對滿足方程式則無解;相反,如果(x,y)有多組對應的實數對滿足方程式則有無數解。
        如果無解,就输出“No answer”;如果有無窮解,就輸出“Too many”。

    輸入說明 :
        輸入僅1行,包含6个整數,a,b,c,d,e,f。輸入資料保證正確。

    輸出說明 :
        如果有解,那麼第1行先輸出“x=”,再輸出x的值,第2行先輸出“y=”,再輸出y的值,均保留2位小數,請參照範例輸出。
        如果無解或有無數解則按要求輸出“No answer”或“Too many”。

    範例輸入 :
    1 1 2 1 -1 0

    範例輸出 :
    x=1.00
    y=1.00

    程式碼 :
    #include<stdio.h>
    
    int main()
    {
        long a,b,c,d,e,f,temp;
        
        scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f);
        
        temp = a*e-b*d;
        if(temp == 0)
        {
            if(c*d == a*f)
                printf("Too many\n");
            else
                printf("No answer\n");
        }
        else
        {
            printf("x=%.2f\n",(double)(c*e-b*f)/temp);
            printf("y=%.2f\n",(double)(c*d-a*f)/-temp);
        }
        return 0;
    }
    


    http://zerojudge.tw/ShowProblem?problemid=a410

    a248: 新手訓練 ~ 陣列應用

    內容 :
        大家都知道,小算盤的小數運算只能算出小數點後三十幾位
        但好奇的桑葉想知道更精準的小數值
        請你幫可憐的桑葉做出可以算出精準的小數運算的程式

    輸入說明 :
        每次輸入有三個正整數 a, b, N
        1<= a , b <= 2147483647
        1 <= N <= 10000
        ( 輸入不會超過1000筆 )

    輸出說明 :
        請輸出 a / b 的小數運算結果
        精準到小數點後N位
        第N位以後請無條件捨去

    範例輸入 :
    18467 41 10
    26500 6334 10
    15724 19169 10
    10 5 3

    範例輸出 :
    450.4146341463
    4.1837701294
    0.8202827481
    2.000

    提示 :
        背景知識: 一維陣列
        改編自 a240: 第一題:1 / 17 小數第 n 位

    程式碼 :
    #include<stdio.h>
    
    int main()
    {
        int a,b,i,n;
        char s[10001];
        
        while(scanf("%d%d%d",&a,&b,&n)==3)
        {
            printf("%d",a/b);
            a = a % b;
            if(n > 0)
            {
                for(i=0; i<n; i++)
                {
                    a = a * 10;
                    s[i] = a / b + '0';
                    a = a % b;
                }
                s[i] = '\0';
                printf(".%s",s);
            }
            printf("\n");
        }        
        return 0;
    }
    


    http://zerojudge.tw/ShowProblem?problemid=a248

    2012年1月29日 星期日

    py2exe 的使用方法 教學

        以下這篇文章是從網路別人的文章改(抄、複製)過來的,這裡是記錄我所找過的資料,以便下次可以不用再找尋,如有侵犯的地方請告知,謝謝!!
    參考網址:
    http://ez2learn.com/index.php/python-tutorials/advance-tutorials/176-py2exepythonexe
    http://www.chinaunix.net/jh/55/608594.html
    http://jimmynote.blogspot.com/2010/03/using-py2exe.html

    --------------------------------------------------------------------------------------------------
    py2exe 使用 教學

    介紹
    py2exe是一個工具程式,可以將python程式轉換成為單一的執行檔案。
    初級篇
    1.官網下載py2exe程式

    2. 安裝py2exe

    3. 在你要打包的檔案同一個目錄下,新增一個名為setup.py的檔案,內容為:
    from distutils.core import setup  
    import py2exe  
    
    setup(console=['???.py'])
    
       其中, ???.py 就是你要打包的檔案名稱,例如 hello.py

    4. 完成後存檔

    5. 接著 開始 -> 執行 -> cmd

    6. 切換到你要打包的檔案的目錄下,EX:
        在cmd裡輸入 cd /d G:\program\python\src
        其中 cd 是進入資料夾的指令
                 /d  是可以切換到其它磁碟的參數

    7. 在cmd裡再輸入 python setup.py install

    8. 在cmd裡再一次輸入 python setup.py py2exe
        如果有發現缺少什麼dll檔,可以參考這篇,或是其他問題,請參考參考網址的第一個網站!

    9. 然後你可以發現有build和dist兩個資料夾在你的目錄下,其中dist的???.exe就是我們要的執行檔,以步驟3為例就是hello.exe囉!

        PS:如果想要將程式移到沒有安裝Python直譯器的環境下執行,只要將dist下的所有檔案複製過去然後再執行.exe檔就可以了

    10.***密技***不知道各位有沒有覺得每次再做5-8的步驟的時候都感覺好麻煩,有沒有更快的方法呢?當然有拉,只要把以下的程式存成bat檔,點2下bat檔就可以執行5-8的步驟囉!
    @echo off
    echo 開始編譯程式
    cd /d G:\program\python\src
    python setup.py install
    python setup.py py2exe
    pause
    
    當然第3行要改成你自己的目錄。另外如果檔名不知道怎麼取的話就取"make.bat"吧!

    進階篇
    1. 一般的情況下都是用console,如果我今天是用wxpython做視窗的話,那我的console就要改成windows
    setup(windows=['???.py'])
    

    2. 若要一次產生多個執行檔,只要將多個 script 檔名以 list 方式傳給 setup() 即可:
    setup(console=["hello.py", "hello1.py", "hello2.py"])
    

    3. 亦可以同時產生 console 和 windows 程式:
    setup(console=["hello.py", "hello1.py"], windows=["hello2.py"])
    

    4. 應用程式有時會使用到一些外部檔案,例如設定檔,字型或是圖檔,透過 setup() 的 data_files 參數,可以將這些額外的檔案加入發佈目錄中。將一個或多個 (目的目錄, [來源檔 1, 來源檔 2...來源檔 n]) 形成的 tuple,包裝成 list 指派給 data_files參數即可:
    setup(console=["hello.py", "hello1.py"], windows=["hello2.py"],
         data_files=[("img",
                      [r"d:\documents\matrix.jpg",
                       r"d:\documents\Batman.jpg"]),
                     ("xml",
                      [r"D:\tmp\mypaint.xml",
                       r"D:\tmp\mypuzzle.xml",
                       r"D:\tmp\mypuzzle1.xml"])])
    
      產生之後的 dist 目錄中,應該會有一 img 目錄,內含 matrix.jpg 和 batman.jpg 兩個檔案,以及 xml 目錄,內含三個 xml 檔案。
      另外 py2exe 還提供了包裝成 windows service 和 COM server 的功能,由於目前有用到所以有研究。另外 Python 的 GUI toolkit - Tkinter 亦可正常使用,只是包裝後會多出 2MB 多的 Tkinter runtime,讓程式瞬間增肥許多...但,誰管這麼多呢?能夠讓別人也用用自己寫的 Python 程式,肥一點也無所謂囉!

    5. 壓縮檔案,如wxpython的lib,可以參考官方文件

    6. 更多的範例與使用http://www.dev.idv.tw/mediawiki/index.php/Py2exe%E7%B0%A1%E4%BB%8B

    2012年1月22日 星期日

    d681: BinaryCount

    內容 :
        對一個二進位的數字每一個位元進行 & 、| 運算
        運算規則如下
        1 & 1 = 1
        1 & 0 = 0
        0 & 1 = 0
        0 & 0 = 0
        1 | 1 = 1
        1 | 0 = 1
        0 | 1 = 1
        0 | 0 = 0

    輸入說明 :
        輸入為一個二進位字串加上運算子 and 或 or
        輸入的二進位字串<32 (5 bit)
        且保證每個二進位字串長度一樣(5bit)
        在每一行的最後會有一個空白
        例如
        10001 or 10000 and 11101 and 01001
             ^    ^      ^      ^       ^      ^       ^
        依序是一個運算元+空白+運算子+空白+運算元+...最後是運算元+一個空白
        每個運算元的長度都是5bit ,但不一定都是5個運算元+4個運算子

    輸出說明 :
        輸出轉換後的運算式 與答案

    範例輸入 :
    10001 or 10000 and 11101 and 01001
    10111 or 10111 or 10010 or 00101
    01000 and 01001 or 10011 and 11101
    10111 and 00011 or 10010 or 11011
    01001 and 10110 or 10010 and 11101

    範例輸出 :
    10001||10000&&11101&&01001 = 00001
    10111||10111||10010||00101 = 10111
    01000&&01001||10011&&11101 = 11001
    10111&&00011||10010||11011 = 11011
    01001&&10110||10010&&11101 = 10000

    程式碼 :
    #include <stdio.h>
    
    int main()
    {
        int i,check;
        char s[2][6],operate[5],nouse[2];
        
        while(scanf(" %s%2c",&s[0],nouse)==2)
        {
            printf("%s",s[0]);
            while(nouse[1]!='\n')
            {
                scanf(" %s %s",operate,s[1]);
                check=0;
                if(operate[0] == 'n')
                    check=1;
                if(check)
                {
                    printf("&&%s",s[1]);
                    for(i=0;i<5;i++)
                        s[0][i] &= s[1][i];
                }
                else
                {
                    printf("||%s",s[1]);
                    for(i=0;i<5;i++)
                        s[0][i] |=  s[1][i];
                }
                scanf("%2c",nouse);
            }
            printf(" = %s\n",s[0]);
        }   
        return 0;
    }
    



    http://zerojudge.tw/ShowProblem?problemid=d681

    d658: 11636 - Hello World!

    內容 :
        當你剛學程式印出「Hello World!」時,你總是很高興因為你還不曉得以後還會碰到多難多複雜的程式和演算法。現在,假設你還不知道迴圈,要印出7行的「Hello World!」,你只好使出最後的絕招──複製、然後貼上。如果你夠聰明的話,你知道輸出7行的「Hello World!」只要複製貼上3次就夠了。 如圖1所示,當我們複製1行「Hello World!」然後貼上你可以得到2行「Hello World!」,當你複製這2行然後再次貼上可以得到4行,最後再複製3行貼上就可以得到上述輸出7行的答案(圖4)。所以複製貼上3次就是我們想要的答案。 現在要你輸出若干行的「Hello World!」,請回答出最少要複製貼上幾次才能達到你要的數量。當然,你複製貼上的「Hello World!」不能被刪除掉。


    Figure 1
    Figure 2
    Figure3
    Figure 4



    輸入說明 :
        有若干行輸入測資,每行包括一個正整數N(0 < n < 10001)代表要印出的「hello world!」數量。當n為負數時代表輸入結束,這行不用做處理。

    輸出說明 :
        對於每行測資請輸出一行,格式為「Case X: Y」,X代表第幾筆測資,Y代表最少要複製貼上的次數。

    範例輸入 :
    2
    10
    -1

    範例輸出 :
    Case 1: 1
    Case 2: 4

    出處 :
        UVa 11636

    程式碼 :

    #include<stdio.h>
    
    int main()
    {
        int n,i,judge,count=0,arr[17]={1};
        for(i=1;i<17;i++)
            arr[i] = arr[i-1]*2;
        while(scanf("%d",&n)==1)
        {
            if(n<0)
                break;
            for(i=0;n>arr[i];i++);
            printf("Case %d: %d\n",++count,i);
        }
        return 0;
    }
    
    



    http://zerojudge.tw/ShowProblem?problemid=d658

    d649: 數字三角形

    內容 :
        小米是個喜歡畫三角形的小朋友
        上課時小米覺得無聊都會在課本的一角畫三角形
        首先畫了
        *

        接著是
        *
        **

        再來
        *
        **
        ***

        就這樣一直畫到下課
        但是這樣太簡單而且太無聊了
        小米想:為何我不向右對齊呢?
        但就在下一節課小米嘗試畫出新三角形時
        小米怎麼樣也沒辦法向右對齊
        就請大家幫小米這個忙吧!

    輸入說明 :
        輸入一數字 N (0 ≤ N ≤ 1000)
        代表小米想畫出高度為 N 的三角形
        當 N 為 0 時結束程式,不需處理這行輸入

    輸出說明 :
        請輸出一個高為 N ,底也為 N 的三角形
        每組輸出請用空行隔開
        空白請用 '_' 代替
        星號請用 '+' 代替

    範例輸入 :
    3
    5
    0

    範例輸出 :
    __+
    _++
    +++

    ____+
    ___++
    __+++
    _++++
    +++++

    提示 :
        背景知識: 雙層迴圈
        ¤ 雙層迴圈練習題
        ¤ 有問題盡量問,這裡不是知識+不會扣點XD (雖然回答也沒有解答贈點)
        ¤ 小挑戰: 你可以用一個字元陣列解決問題嗎?
        ¤ 因應 JAVA 使用者將每測資點時限改為 10 s 並修改測資 (感謝 liouzhou_101)
        ¤ 2010/07/13 修改測資,並重測

    程式碼 :
    #include <stdio.h>
    
    int main()
    {
        int i,j,k,n;
        
        while(scanf(" %d",&n)==1 && n!=0)
        {
            for(i=0;i<n;i++)
            {
                for(j=0;j<(n-i-1);j++)
                    printf("_");
                for(k=i+1;k>0;k--)
                    printf("+");
                printf("\n");
            }
        }   
        return 0;
    }
    




    http://zerojudge.tw/ShowProblem?problemid=d649

    d635: 幸運777?luck

    內容 :
        你說什麼?777=511?怎麼可能…?
        因為這裡是八進位的777轉換成10進位的511了~(好爛ˇ)
        給你十進位的數字,請你把他們轉成八進位好嗎?

    輸入說明 :
        每個測資點有多筆測資,請以EOF作為結束。
        每組測資一行,有整數n(0<=n<=511),表示要轉換成八進位的數字 最後出現小於0的整數表示測資結束。 <所有出現的整數皆可以signed 32-bits int儲存>

    輸出說明 :
        對於每一行測資請輸出整數n的八進位表示。
        對於最後一個小於0的整數,請輸出-1。

    範例輸入 :
    277
    511
    123
    456
    -1

    範例輸出 :
    425
    777
    173
    710
    -1

    提示 :
        背景知識: 流程控制
        1.進位制轉換
        2.共三個測資點30%、35%、35%,
        第一個測資點即範例測資。

    程式碼 :
    #include<stdio.h>
    
    int main()
    {
        int i;
        while(scanf("%d",&i)==1)
        {
            if(i<0)
            {
                printf("-1\n");
                break;
            }
            printf("%o\n",i);
        }
        return 0;
    }
    



    http://zerojudge.tw/ShowProblem?problemid=d635

    2012年1月8日 星期日

    a054: 電話客服中心

    內容 :
        很多銀行及公司設立了電話客服中心來服務他們的客戶。為了加速身分的查核,常常會要求打電話進來的客戶輸入他的身分證號碼。可是電話上只有數字鍵,要輸入身分證號碼的第一個字母有點麻煩,因此有的語音系統會要求來電者輸入後 9 碼,再根據後 9 碼來推算可能的英文字母。
        很多人都知道,身分證號碼的最後一碼是「檢查碼」,它是用前 9 碼所推算出來的,其推算的規則如下:
        先依照下表將英文字母轉換為 2 位數字,再加上第 2 到第 9 位的 8 位數字一共有 10 位數字。
    台北市 A 10    彰化縣 N 22
    台中市 B 11    新竹市 O 35
    基隆市 C 12    雲林縣 P 23
    台南市 D 13    嘉義縣 Q 24
    高雄市 E 14    台南縣 R 25
    台北縣 F 15    高雄縣 S 26
    宜蘭縣 G 16    屏東縣 T 27
    桃園縣 H 17    花蓮縣 U 28
    嘉義市 I  34    台東縣 V 29
    新竹縣 J  18    金門縣 W 32
    苗栗縣 K 19    澎湖縣 X 30
    台中縣 L 20    陽明山 Y 31
    南投縣 M 21   連江縣 Z 33
        由左至右,第一位乘 1,第二位乘 9,第三位乘 8,第四位乘 7...,以此類推,最後一位乘 1。
        求各位相對數字乘積的總和 s。
        求 s 的個位數 m。
        檢查碼 c = 10 - m 。
        假設某人的身份證號碼前 9 碼為 F13024567,那麼他的最後一位檢查碼的計算過程如下:

         F        1   3     0      2      4      5       6   7
      1   5      1    3     0      2      4      5       6   7
    ×1 ×9   ×8  ×7   ×6    ×5    ×4    ×3    ×2  ×1
    1 + 45 + 8 + 21 + 0 + 10 + 16 + 15 + 12 + 7 = 135
    檢查碼 = 10 - (135 % 10) = 5

        根據上面的規則,A12345678、M12345678 和 W12345678 這三個號碼的檢查碼都是 9。因此,如果在電話上所輸入的後 9 碼是 123456789 時,它的第一位英文字母可能是 A,也可能是 M 或 W。

    輸入說明 :
        輸入有若干筆測試資料,每筆一行,含有一個身份證號碼的後 9 碼。

    輸出說明 :
        對於每筆測試資料,將可能的第一位大寫字母依字母順序輸出於一行。

    範例輸入 :
    130245675
    123456789

    範例輸出 :
    FS
    AMW

    程式碼 :
    #include<stdio.h>
    
    int main()
    {
        int i,n,check,id[8],add_id_num,add_all;
        int city[26] = {10,11,12,13,14,15,16,17,34,18,19,20,21,22,35,23,24,25,26,27,28,29,32,30,31,33};
    
        while(scanf("%d",&n)==1)
        {
            check = n % 10;
            n = n / 10;
            for(i=0; i<8; i++)
            {
                id[7-i] = n % 10;
                n = n / 10;
            }
            
            add_id_num = 0;        
            for(i=0; i<8; i++)
                add_id_num += id[i]*(8-i);
            for(i=0; i<26; i++)
            {
                add_all = city[i]/10 + city[i]%10*9 + add_id_num;
                if(((10-(add_all%10))%10) == check)
                    printf("%c",'A'+i);
            }
            printf("\n");
        }
        return 0;
    }
    


    http://zerojudge.tw/ShowProblem?problemid=a054