網頁

2013年12月4日 星期三

c048: Ant on a Chessboard、UVA 10161

 (defun calc-coor (sec) 
   "計算座標函式"
   (if (equal sec 0) 
       (return-from calc-coor))
   ;; 把方格從0秒開始計算
   ;; 再以斜線上的點作為基準(base) 
   ;; 最後計算 基準+位移 即為所求
   (let* (( sec (- sec 1))
         (layer (+ (floor (sqrt sec)) 1))
         (base (* layer (- layer 1)))
         (displace (- sec base))
         (coor (list layer layer)))
     (if (equal (rem layer 2) 1)
        (if (> displace 0) 
            (decf (first coor) displace) 
            (incf (second coor) displace))
         (if (> displace 0) 
            (decf (second coor) displace)
            (incf (first coor) displace)))
     coor
     ))
  
 (defun chess-board ()
   (do ((sec (read) (read))) 
       ((<= sec 0) )
     (format t "~A~%" (calc-coor sec))))  
 
 (chess-board) 
 #include <stdio.h>
 #include <math.h> 
 
 int main(int argc, char *argv[])
 {
        int N ; 
        int layer ; 
        int base ; 
        int displace ; 
        int coor[2] ; 
        while(scanf("%d",&N) && N){
                N-- ; 
                layer = floor(sqrt(N))+1; 
                base = layer*(layer-1) ; 
                displace = N-base ; 
                coor[0] = coor[1] = layer ; 
 
                if(layer%2 == 1) 
                        if(displace > 0)
                                coor[0] -= displace ; 
                        else
                                coor[1] += displace ;
                else
                        if(displace > 0) 
                                coor[1] -= displace ; 
                        else
                                coor[0] += displace ; 
                printf("%d %d\n", coor[0], coor[1]) ;  
        }
        return 0;
 }
 
題目連結:http://zerojudge.tw/ShowProblem?problemid=c048

2013年12月2日 星期一

c045: Rotating Sentences、UVA 490

 #include <stdio.h>
 #include <string.h> 
 #define MAX 101
 char arr[MAX][MAX] ;
 
 int main(int argc, char *argv[])
 {
        memset(arr, '\0', sizeof(arr) ) ; 
        int i, j ;
        int rows = 0; 
        int cols = 0 ; 
        for (i=0; fgets(arr[i], sizeof(arr[i]), stdin) != NULL ; ++i) 
                rows++ ; 
 
        char *pos ; 
        for (i=0 ; arr[i][0]!='\0'; ++i)
        {
                if ((pos=strchr(arr[i], '\n')) != NULL)
                        *pos = '\0';
                if (strlen(arr[i]) > cols)
                        cols = strlen(arr[i]) ; 
        }
        /* 字串由左下開始輸出,先向上輸出,再向右輸出 */ 
        for (i=0; i<cols; ++i)
        {
                for (j=rows-1; j>=0 ; --j) 
                        printf("%c",(arr[j][i]=='\0'?' ':arr[j][i])) ;
                puts("") ; 
        }
 
        return 0;
 }
 (defparameter arr (make-array '(100) :initial-element nil))
 (defparameter rows 0) 
 (defparameter cols 0) 
 
 (defun read-lines () 
 "read lines until eof" 
   (do ((i 0 (incf i) )
        (line (read-line *standard-input* nil 'eof)
             (read-line *standard-input* nil 'eof)))
       ((eql line 'eof) i)
     (setf (aref arr i) line)))
 
 
 (defun max-len-str() 
   (let (( max -1 ))
     (do ((i 0 (incf i)))
        ((>= i rows) max) 
        (if ( > (length (aref arr i)) max ) 
            (setf max (length (aref arr i)))))))
 
 (defun printf() 
   (do ((i 0 (incf i)) ) 
       ((>= i cols)) 
     (do ((j (- rows 1) (decf j))) 
        ((< j 0)) 
       (if (> (length (aref arr j)) i)  
          (princ (aref (aref arr j) i))
          (princ " ") ))
     (princ #\Newline))) 
 
 (defun rotate-string() 
   (setf rows (read-lines)) 
   (setf cols (max-len-str)) 
   (printf))
 
 (rotate-string)  
題目連結:http://zerojudge.tw/ShowProblem?problemid=c045

2013年11月30日 星期六

Balance partion problem

 (defun balpart (lst)
   "balace partion problem " 
   (let* ((sum (apply #'+ lst))
         (halfsum (floor (/ sum 2)) )
         (sol (make-list (+ halfsum 1) :initial-element nil )) 
         )
     (setf (first sol ) t ) 
     (dolist (i lst ) 
       (do ((j halfsum (decf j)))
          ((< j i))
        (if (nth (- j i) sol)
            (setf (nth j sol) t))))
 
     (let ( (halfcloser (do ((i halfsum (decf i) )) ((nth i sol) i ) )))
       (return-from balpart (- sum halfcloser halfcloser)))
     ))
 
 (format t "Please input a number list: ~%")
 (finish-output t ) 
 (format t "The minimum difference is : ~A~%" (balpart (read) )  )

 
詳細過程請參考此連結

2013年11月27日 星期三

ctex simsun.ttc not found 解決方法

 
網路上下載simsun.ttc後, 尋找你的texmf-local資料夾 
將simsun.ttc放入texmf-local/fonts/truetype/simsun.ttc(沒有的資料夾自己建)
最後執行texhash(sudo texhash)