趕快加入我們來參與討論吧!
您需要 登錄 才可以下載或查看,沒有帳號?加入我們
x
本帖最後由 domen111 於 2014-12-7 21:13 編輯
Green Judge 有很完整的練習題: 公平的戰役
TOJ上的練習題: 南極熊大遷徙
一、T行版
題目開頭給你一個數字T告訴你有T筆測資
方法一,用for迴圈,簡單易理解的方法
[C++] 純文本查看 復制代碼 #include<iostream>
using namespace std;
int main()
{
int T;
cin>>T;
for(int i=0;i<T;i++)
{
//code
}
}
方法二,用while,比較不易理解,但好處是程式碼較短,且不會多一個變數i,避免以後for迴圈必須從j開始編號
[C++] 純文本查看 復制代碼 #include<iostream>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
//code
}
} 每次while迴圈都會將T減1,直到T=0就結束
二、0結尾版
方法一,用無窮迴圈,直到0為止
[C++] 純文本查看 復制代碼 #include<iostream>using namespace std;
int main()
{
while(1)
{
int a,b; //測資資料
cin>>a>>b;
if(a==0&&b==0)
break;
//...
}
} 方法二,更漂亮的寫法,省下好幾行,類似EOF版的寫法
[C++] 純文本查看 復制代碼 #include<iostream>
using namespace std;
int main()
{
int a,b; //測資資料
while(cin>>a>>b && (a!=0||b!=0))
{
//...
}
}
其實也可以用「,」
[C++] 純文本查看 復制代碼 #include<iostream>
using namespace std;
int main()
{
int a,b; //測資資料
while(cin>>a>>b, a!=0||b!=0)
{
//...
}
} 三、EOF版
題目完全沒有告訴你總共有幾筆測資,也沒有說如何結尾,那該怎麼辦呢?
用無窮迴圈一直讀嗎? 不行啊! 這樣會TLE的
其實當測資檔結束時是有辦法在程式中偵測到的,那叫做EOF(End Of File)
當cin讀到EOF時的回傳值能夠自動轉型成false,所以直接放在while裡就行了
[C++] 純文本查看 復制代碼 #include<iostream>
using namespace std;
int main()
{
int a,b; //測資資料
while(cin>>a>>b)
{
//...
}
} scanf的寫法:
[C++] 純文本查看 復制代碼 #include<cstdio>
using namespace std;
int main()
{
int a,b;
while(scanf("%d %d",&a,&b)!=EOF)
{
//...
}
}
或
[C++] 純文本查看 復制代碼 #include<cstdio>
using namespace std;
int main()
{
int a,b;
while(~scanf("%d %d",&a,&b))
{
//...
}
} 那麼這樣要怎麼在本機自己測試呢?
Windows底下在黑視窗裡面按下Ctrl+Z或Ctrl+X就相當於EOF,你們可以測試看看
其他競賽常見的輸入方式可以參考這篇
|