#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; }
2014年2月24日 星期一
c048: Ant on a Chessboard
2014年2月7日 星期五
UVA 10235 - Simply Emirp
#include <iostream> #include <cstdio> #include <vector> #include <sstream> #include <algorithm> #include <bitset> #define MAX 1000000 using namespace std; bitset<MAX+1> bs; void seive(){ bs.set(); bs[0]=false, bs[1]=false; for (long long int i=2; i<=bs.size(); ++i){ if (bs[i]==true){ for (long long int j=i*i; j<bs.size(); j+=i) bs[j]=false; } } return; } int main(int argc, char *argv[]){ seive(); int num, renum, tmp; while(cin>>num){ tmp = num; for (renum=0; tmp; tmp/=10){ renum = renum*10+(tmp%10); } if (bs[num]==true){ if (bs[renum]==true && num!=renum){ printf("%d is emirp.\n", num); } else { printf("%d is prime.\n", num); } } else { printf("%d is not prime.\n", num); } } return 0; }
2014年2月6日 星期四
UVA 11150 - Cola
#include <iostream> #include <algorithm> #include <vector> using namespace std; int main(int argc, char *argv[]){ int n; while(cin>>n){ int total=n; int empty=n; int remain; while (empty>=3){ remain = empty/3; empty = empty%3; total += remain; empty += remain; } if (empty==2){ total++; } cout << total << endl; } return 0; }
UVA 299 - Train Swapping
/* just like bubble sort swapping times */ #include <iostream> #include <algorithm> using namespace std; int main(int argc, char *argv[]){ int t; cin >> t; int train[51]; while(t--){ int length; int count=0; cin >> length; for (int i=0; i<length; ++i){ cin >> train[i]; } for (int i=0; i<length-1; ++i){ for (int j=0; j<length-i-1; ++j){ if (train[j]>train[j+1]) swap(train[j], train[j+1]), count++; } } cout << "Optimal train swapping takes " << count << " swaps." << endl; } return 0; }
UVA 10062 - Tell me the frequencies!
#include <iostream> #include <string> #include <vector> #include <map> #include <algorithm> using namespace std; class Freq{ public: Freq(char ansii, int count){ this->ansii = ansii; this->count = count; } char ansii; int count; }; bool FreqCompare (const Freq &a, const Freq &b){ if (a.count!=b.count){ return a.count<b.count; } else { return a.ansii>b.ansii; } } int main(int argc, char *argv[]){ map<char, int> m; map<char, int>::iterator it; vector<Freq> freq; string line; bool firstTime=true; while (getline(cin, line)){ m.clear(); freq.clear(); for (int i=0; i<line.size(); ++i){ it = m.find(line[i]); (it == m.end()) ? m[line[i]]=1 : m[line[i]]++; } for (it=m.begin(); it!=m.end(); ++it){ freq.push_back(Freq(it->first, it->second)); } sort(freq.begin(), freq.end(), FreqCompare); firstTime ? firstTime=false : cout << endl ; for (int i=0; i<freq.size(); ++i){ cout << (size_t) freq[i].ansii << " " << freq[i].count << endl; } } return 0; }
UVA 543 - Goldbach's Conjecture
/* use seive method to generate the table of prime number reference: http://www.cnblogs.com/xiaobaibuhei/p/3329702.html http://maplewing.blogspot.tw/2011/02/uva543goldbachs-conjecture.html*/ #include <iostream> #include <vector> #include <bitset> #define MAX 1000000 using namespace std; bitset<MAX+1> bs; vector<int> primes; void seive(){ bs.set(); // set all bit to 1 bs[0]=false, bs[1]=false; for (long long int i=2; i<=MAX; ++i){ if (bs[i]==true){ for (long long int j=i*i; j<=MAX; j+=i) bs[j]=false; primes.push_back(i); } } return; } int main(int argc, char *argv[]){ seive(); int n; while(cin>>n && n){ for (int i=0; i<primes.size(); ++i){ if (bs[primes[i]]==true && bs[n-primes[i]]==true){ cout << n << " = " << primes[i] << " + " << n-primes[i] << endl; break; } } } return 0; }
2014年2月5日 星期三
UVA 10226 - Hardwood Species
#include <iostream> #include <cstdio> #include <iomanip> #include <string> #include <map> #include <algorithm> using namespace std; int main(int argc, char *argv[]){ int t; string line; cin >> t; getline(cin, line); // read new line getline(cin, line); // read new line while (t--){ map<string, int> m; map<string, int>::iterator it; int count=0 ; while (getline(cin, line)){ if (line=="") break; it = m.find(line); if (it == m.end()){ m[line] = 1; } else { it->second++; } count++; } for (it=m.begin(); it!=m.end(); ++it){ float percent = 100.0*it->second/count; cout << it->first << ' ' << fixed << setprecision(4) << percent << endl; } if (t>0) cout << endl ; } return 0; }
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年9月14日 星期六
c033: Prime Cuts、UVA 406
#include<stdio.h> int primes[] = {1,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997} ; int main(){ int N, C ; int i ; while(scanf("%d %d", &N, &C)==2){ int count = 0 ; for(i=0 ; i<sizeof(primes)/sizeof(int) ; ++i){ if(primes[i]<=N) count++ ; else break ; } int C_new = (count%2 ? 2*C-1 : 2*C ) ; int low, high ; if(C_new>count) { low = 0, high = count-1 ; } else{ if(count%2){ int mid = count/2 ; low = mid-(C-1) ; high = mid+(C-1) ; } else{ int mid1 = count/2-1 ; int mid2 = count/2 ; low = mid1-(C-1) ; high = mid2+(C-1) ; } } printf("%d %d:", N, C) ; for(i=low ; i<=high ; ++i) printf(" %d",primes[i]) ; printf("\n\n") ; } return 0 ; }
2013年9月11日 星期三
c032. 00382 - Perfection、UVA 382
#include<stdio.h> #include<stdlib.h> #include<math.h> int sum_divisor(int n){ if(n==1) return 0 ; else{ int sum = 1, i ; for(i=2 ; i<=sqrt(n) ; ++i){ if(!(n%i)){ if(i == n/i) sum += i ; else sum += i+n/i ; } } return sum ; } } int main(){ int n ; int sum ; int i ; puts("PERFECTION OUTPUT") ; while(scanf("%d",&n)==1 && n){ printf("%5d ",n) ; sum = sum_divisor(n) ; if(sum < n) puts("DEFICIENT") ; else if(sum > n) puts("ABUNDANT") ; else puts("PERFECT") ; } puts("END OF OUTPUT") ; return 0; }
c031: Count on Cantor、UVA 264
#include<stdio.h> #include<stdlib.h> #define swap(a,b){int t; t=a; a=b; b=t;} int main(){ int n ; int i ; while(scanf("%d",&n)==1){ for(i=1 ; i<4473 ; ++i){ int low = (i*i-i+2)>>1 ; int high = ((i+1)*(i+1)-(i+1)+2)>>1 ; if(n>=low && n<high){ int left=1, right=i ; int d=n-low ; left += d, right -= d; if(i%2) swap(left,right) ; printf("TERM %d IS %d/%d\n", n, left, right) ; } } } return 0 ; }
2013年8月25日 星期日
c024: 10079 - Pizza Cutting、UVA 10079
#include<stdio.h> int main(){ long long int n ; while(scanf("%lld",&n) && n>=0) printf("%lld\n",(n*(n+1)>>1)+1) ; return 0 ; }
c022. 10783 - Odd Sum、UVA 10783
#include<stdio.h> #include<stdlib.h> int main(){ int t ; int a, b ; int sum ; int i, j; scanf("%d", &t) ; for(j=1 ; j<=t ; ++j){ sum = 0 ; scanf("%d %d", &a, &b) ; a = a%2?a:a+1 ; for(i=a ; i<=b ; i+=2){ sum += i ; } printf("Case %d: %d\n", j, sum) ; } return 0 ; }
c015. Reverse and Add、UVA 10018
#include<iostream> #include<string> #include<sstream> using namespace std ; size_t reverseint(size_t num){ size_t inrev=0 ; while(num>0){ inrev = inrev*10+num%10 ; num /= 10 ; } return inrev ; } size_t reva(size_t num){ return num+reverseint(num) ; } int check_pd(unsigned int num){ stringstream ss ; string str ; ss << num ; ss >> str ; for(int i=0 ; i<str.length()>>1 ; ++i) if(str[i]!=str[str.length()-i-1]) return 0 ; return 1 ; } int main(){ int t, counter; size_t num ; cin >> t ; while(t--){ counter = 0 ; cin >> num ; do{ num = reva(num) ; counter++ ; }while(!check_pd(num)) ; cout << counter << " " << num << endl ; } return 0 ; }
2013年8月22日 星期四
c014. Primary Arithmetic、UVA 10035
#include<iostream> #include<string> using namespace std ; int main(){ string num1, num2 ; int cb, cs ; string fill ; while(cin >> num1 >> num2){ if(num1=="0" && num2=="0") break ; if(num1.length() > num2.length()){ fill.assign(num1.length()-num2.length(),'0') ; num2 = fill+num2 ; } else{ fill.assign(num2.length()-num1.length(),'0') ; num1 = fill+num1 ; } string::reverse_iterator rit1=num1.rbegin() ; string::reverse_iterator rit2=num2.rbegin() ; cb = 0, cs = 0; for(; rit1!=num1.rend() ; ++rit1, ++rit2){ if(*rit1-'0'+*rit2-'0'+cb >= 10) cb=1, cs++ ; else cb=0; } if(cs>1) cout << cs << " carry operations." << endl ; else if(cs==1) cout << "1 carry operation." << endl ; else cout << "No carry operation." << endl ; } return 0 ; }
c013. 00488 - Triangle Wave、UVA 488
#include<stdio.h> int main(){ int t ; int a, f ; int plus, counter ; int i, j, k; scanf("%d",&t) ; while(t--){ scanf("%d %d",&a,&f) ; for(k=0 ; k<f ; ++k){ plus = 1, counter = 1 ; for(i=1 ; i<= 2*a-1 ; ++i){ for(j=0 ; j<counter ; ++j) printf("%d",counter) ; puts("") ; if(i==a) plus = 0 ; (plus) ? counter++ : counter-- ; } puts("") ; } } return 0 ; }
訂閱:
文章 (Atom)