420 likes | 657 Views
介紹 UVa & I/O. 介紹 U Va & ICPC & NCPC I/O 資料型態 I/O 範例 程式技巧. Coding 突破. 什麼是 ACM?. ACM=Association of Computing Machinery 美國計算機協會. 註冊 UVa . 跟著做 http://uva.onlinejudge.org/. What are ICPC & NCPC. ICPC= International Collegiate Programming Contest
E N D
介紹 UVa & ICPC & NCPC I/O 資料型態 I/O 範例 程式技巧 Coding突破
什麼是 ACM? • ACM=Association of Computing Machinery • 美國計算機協會
註冊 UVa • 跟著做 • http://uva.onlinejudge.org/
What are ICPC & NCPC ICPC= International Collegiate Programming Contest = 國際大專體設計競賽 NCPC=全國大專軟體設計競賽
你可能得到的結果 • Judge Situation • Accept (AC) 接受(通過) • Presentation Error (P.E.) 格式錯誤 • Wrong Answer (WA) 錯誤答案 • Time Limit Exceeded (TLE) 超過時間 • Memory Limit Exceeded (MLE) 超過記憶體上限 • Output Limit Exceeded (OLE) 超過輸出上限 • Compile Error (CE) 編譯錯誤 • Submission Error (SE) 提交錯誤 • Runtime Error (RE) 執行錯誤 • Restricted Function (RF) 使用禁止函式
output 是int: printf(“%d\n”,output); printf(“%3d\n”,output); printf(“%-3d\n”,output); printf(“%03d\n”,output); output是int: printf(“%f\n”,output); printf(“%2.3f\n”,output);
output是char或是int : printf(“%c\n”,output); printf(“%d\n”,output); string是char的陣列 printf(“%s\n”,string); // string is char[]
讀到檔案結束 while(scanf(“%d”,&input)!=EOF){ //code } 條件式結束 while(scanf(“%d”,&input) && input != 0 ){ //code } 已知有幾筆測資 while(datas--){ //code }
陣列大小要注意~~ int number[10]; for(int counter=1 ;counter<=10 ;counter++){ scanf(“%d”,&number[counter]); } 當 counter=10 就會發生錯誤
字元是以ASCII 做運算 char code; // 有一個密碼 code = ‘a’; // 他是a code+= 3; // 加3後 printf(“%c”,code); 將會印出d
The second AC 458
苦工題 switch 是好朋友 switch 版: switch(){ case ‘ ‘: ….. case ‘ ‘: } if 版: if(){ }else{ if(){ }else{ …….. } } 記得要加break喔!!
善用strcmp strcmp( string1,string2); //比較兩字串 strcmp( string , “command\0”); // 看string 是不是command warning1 : 要有#include<string.h>
strcmp 的回傳值 strcmp的回傳值為 • 前者的字典排序小於後者時 回傳負數 • 當前者的字典排序等於後者時 回傳零 • 當前者的字典排序大於後者時 回傳正數
Tips about programming • 好習慣 • 測資很奸詐 • 註解 • CMD
變數要有意義 int sasdf; int sdfdf; int eafesgf; scanf(“%d%d”,&sasdf,& sdfdf); eafesgf = sasdf + sdfdf ; // 久了你自已都不知這是什麼 int number1; int number2; int sum; scanf(“%d%d”,&number1,&number2); sum = num1 + num2;
記得要排版 有排版 while( ){ for(){ sum+=1; } counter++; } 沒排版 while(){ for() { sum+=1; } counter++ } // 是不是比較難讀了?
變數不能沒有值 錯誤範例 : //找最大的數 int input; int biggest; while(scanf(“%d”,&input)!=EOF){ if(biggest<input) biggest = input ; } // 程式第一次執行會出問題
變數周期要注意 錯誤例: for(int sum=0, i =0 ; i <10 ; i ++){ sum += i ; } printf(“%d\n”,sum);
CMD 測資處理 • windows的cmd檔案IO的功能 • 指令: • test<input.txt <enter> 從檔案input讀入test.exe執行 • test>output.txt <enter> 把你在test.exe所print的結果存到output.txt中 混用法 test<input.txt>output.txt <enter>
參考資料 • 2009年講議 • <C How to pragram>
練習一下吧!!! • 基本題 • 272 • 10071 • 10209 //float 不夠準喔~~ • 進階題 • 591 • 10222
C++ IO • tip : #include<iostream> • using namespace std; • Input • cin ex:cin>>num1>>num2; = scanf(“%d %d”,&num1,&num2);
cin about string • cin.get() • Ex: char test; • cin.get(test); • cin.getline(); • Ex: char test[10]; • cin.getline(test,9,’\n’); • Ps:最後的參數為斷句的key char
cout • cout • Ex:int n1=0,n2=1; • cout<<“n1=”<<n1<<“n2=”<<n2<<endl; • 可以不需設定type!
cout tips • cout.setprecision() • #include <iomanip> • double n=3.14159; cout << setprecision(2) <<fixed << n<<endl; //輸出n到小數點下2位
cout tips • cout.width(); • Ex: printf(“%-10d\n”,a); printf(“%10d\n”,a); = cout.width(10); cout<<left<<a<<endl; cout<<right<<a<<endl;
cout tips • cout.fill(); • Ex: printf(“%010d\n”,a); = cout.width(10); cout.fill(‘0’); cout<<right<<a<<b<<endl;