2011年10月30日 星期日

a263: 日期差幾天

內容 :
    給你兩個日期,問這兩個日期相差幾天。

輸入說明 :
    輸入有多筆測資,每筆測資有兩行,每行有三個整數依序是年、月、日。輸入以 EOF 作為結束,題目保證不會有不符合的測資出現。

輸出說明 :
    輸出兩個日期差幾天。

範例輸入 :
2011 10 19
2011 10 18

範例輸出 :
1

提示 :
    年份在[0,9999]範圍內

程式碼:
#include <stdio.h>

int monthday[13] = {0,0,31,59,90,120,151,181,212,243,273,304,334};

int calculateDay(int year, int month, int day)
{
    int leaps,isleap;
    
    isleap = (year%4==0 && year%100!=0) || year%400==0;
    
    year--;
    leaps = year/4 - year/100 + year/400;
    
    return (year*365+leaps) + (monthday[month]+((month>2)?isleap:0)) + day;
}

int main ()
{
    int i,year[2],month[2],day[2],check;
  
    while(scanf("%d %d %d",&year[0],&month[0],&day[0])==3)
    {
        scanf("%d %d %d",&year[1],&month[1],&day[1]);
        
        check = calculateDay(year[0],month[0],day[0]) - calculateDay(year[1],month[1],day[1]);
        
        printf("%d\n",check>-1?check:-check);
    }
    
    return 0;
}




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

a008: 中文大寫數字

內容 :
    我們在金融機構填寫金額時使用的不是阿拉伯數字,而是中文的大寫數字。
    請寫一個程式將數字轉換為中文大寫數字
    標準大寫寫法如下:零、壹、貳、參、肆、伍、陸、柒、捌、玖、拾、佰、仟、萬、億

輸入說明 :
    整數數字 >=0 且 <=2147483647

輸出說明 :
    文字字串

範例輸入 :
12345
10200

範例輸出 :
壹萬貳仟參佰肆拾伍
壹萬零貳佰

提示 :
    * 遇到 10 時輸出 『拾』or『壹拾』均可

程式碼 :
#include<stdio.h>
#include<string.h>

void map(char num)
{
    switch(num)
    {
        case '1':
            printf("壹"); break;
        case '2':
            printf("貳"); break;
        case '3':
            printf("參"); break;
        case '4':
            printf("肆"); break;
        case '5':
            printf("伍"); break;
        case '6':
            printf("陸"); break;
        case '7':
            printf("柒"); break;
        case '8':
            printf("捌"); break;
        case '9':
            printf("玖"); break;
        case '0':
            printf("零"); break;
    }
}

int main()
{
    int i,len,zero,check;
    char num[20];
    
    while(scanf("%s",num)==1)
    {        
        for(; num[0] == 48; )
        {
            len = strlen(num);
            for(i=0; i<len; i++)
                num[i] = num[i+1];
        }
        
        len = strlen(num);        
        zero = 0;
                
        check = 0;
        for(i=9; i>-1; i--)
        {
            if(len > i)
            {
                if(num[len-i-1] == '0')
                    zero = 1;
                else
                {
                    if(zero)
                        map('0');
                    zero = 0;
                    map(num[len-i-1]);
                    
                    if(i == 7 || i == 3)
                        printf("仟");
                    if(i == 6 || i == 2)
                        printf("佰");
                    if(i == 9 || i == 5 || i == 1)
                        printf("拾");
                    check = 1;
                }
                if(i == 4 && check)
                {
                    check = 0;
                    printf("萬");
                }
                else if(i == 8 && check)
                {
                    check = 0;
                    printf("億");
                }
            }
        }
        printf("\n");
    }
    return 0;
}



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

2011年10月27日 星期四

a276: 又分糖果囉

內容 :
    再分糖果吧!
    你一開始有 n 包糖果,每包糖果裡面有若干顆,想要公平的分給 2 個人
    所謂公平就是指這兩個人有的糖果數量的差越小越好。

輸入說明 :
    多組輸入,以EOF作為結束
    每組測試資料的第一行是一個正整數 n ,第二行有 n 個數字 mi 以空格隔開
    1 <= n <= 20
    1 <= mi <= 1000000

輸出說明 :
    輸出兩人糖果數量的的差。

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

範例輸出 :
1
0

提示 :
    第一組:(3,7) 和 (1,8)
    第二組:(4,4,2) 和 (1,9)

概念講解 :
    可以試著用01背包問題來解決。
    不懂什麼是01背包問題沒關係,我們只需要知道對這一包糖果我們有兩個選擇,那就是拿和不拿,我們以範例一為例,並假設左邊是不拿,右邊是拿,接著看看下面我辛苦畫的圖吧!


對其中一個人而言,每包糖果都有兩個選擇,那就是拿和不拿
                                                                              start
                                                        不拿 |────────────|拿
                                                                0                                   1                 第一包糖果 有1個糖果
                                                 不拿 |────|拿           不拿 |─────|拿
                                                         0           0+3                  1            1+3      第二包糖果 有3個糖果 
剩下的請允許我偷懶一下          |───|      |───|            |───|       |───|
拿與不拿就省略不寫                 0        7     3     10          1       8     4       11   第三包糖果 有7個糖果 
                                                  |─|     |─|    |─|    |─|        |─|     |─|    |─|     |─|
                                                 0  8   7 15 3 11 10 18    1  9   8 16 4 12  11 19 第四包糖果 有8個糖果


    看到最下面的16個數字了嗎?這些就是所有糖果的組合情況,也就是代表說這些是兩個人中的其中一個人拿到的所有情形,既然算出了其中一個人的糖果數,那另一個人的糖果數相信你一定可以算得出來,最後把糖果數差最小的印出來就行了。

程式碼 :
#include<stdio.h>
#include<stdlib.h>

int min,n,total,mi[20];

void isGet(int temp, int index)
{
    if(index == n)
    {
        temp = total - temp - temp;
        if(temp < 0)
            temp = -temp;
        if(temp < min)
            min = temp;
        return ;
    }
    if(min == 0)
        return ;
    isGet(temp, index+1);
    isGet(temp + mi[index], index+1);
}

int main()
{
    int i;
    
    while(scanf("%d",&n)==1)
    {
        total = 0;
        min = 99999999;
        for(i=0; i<n; i++)
        {
            scanf("%d",&mi[i]);
            total += mi[i];
        }
        isGet(0, 0);
        printf("%d\n",min);
    }
    
    return 0;
}





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

2011年10月7日 星期五

zerojudge 進不去題目

今天寫題目寫到一半,要進去重新看題目時,發現進不去,並跳出許多錯誤訊息,如下:

----------------------------------------------------------------------------------------------

糟糕囉!網頁發生錯誤500
請通知管理員!謝謝!jiangsir@zerojudge.tw
javax.el.PropertyNotFoundException: Property 'accessible_Testjudge' not found on type idv.jiangsir.Beans.ProblemBean
Request that failed: /ShowProblem
Status code: 500
Exception: javax.el.PropertyNotFoundException: Property 'accessible_Testjudge' not found on type idv.jiangsir.Beans.ProblemBean

顯示例外堆疊追蹤:
javax.el.BeanELResolver$BeanProperties.get(BeanELResolver.java:214)
javax.el.BeanELResolver$BeanProperties.access$400(BeanELResolver.java:191)
javax.el.BeanELResolver.property(BeanELResolver.java:300)
javax.el.BeanELResolver.getValue(BeanELResolver.java:81)
javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54)
org.apache.el.parser.AstValue.getValue(AstValue.java:123)
org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:938)
org.apache.jsp.ShowProblem_jsp._jspx_meth_c_005fif_005f12(ShowProblem_jsp.java:2060)
org.apache.jsp.ShowProblem_jsp._jspService(ShowProblem_jsp.java:542)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
idv.jiangsir.zerojudge.controller.ShowProblemServlet.doGet(ShowProblemServlet.java:189)
javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
idv.jiangsir.utils.filter.PreviousFilter.doFilter(PreviousFilter.java:90)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
idv.jiangsir.utils.filter.GeneralFilter.doFilter(GeneralFilter.java:155)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
org.apache.catalina.valves.RequestFilterValve.process(RequestFilterValve.java:276)
org.apache.catalina.valves.RemoteAddrValve.invoke(RemoteAddrValve.java:81)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:619)
------------------------------------------------------------------------------------------------------------

*可惜沒摸過,看不懂,但重點不是這個,是要怎麼看到題目?
利用google 搜尋  "zerojudge 題號 "  , ex: "zerojudge a001"
然後點庫存頁面,就可以看到以前的記錄了

*再來就是重點的,要怎麼把我寫好的code去judge呢?
只要輸入下面那一行就可以直接Judge了

http://zerojudge.tw/SubmitCode?problemid=題號

ex: http://zerojudge.tw/SubmitCode?problemid=a001

其實他的網站只有讀題目內容有錯誤,其他的部分還是正常的
希望可以幫助有遇到相同問題的人,最好是快點修好比較重要啦,畢竟我的方法是治標不治本。