CSU OJ 1340 A Sample Problem
Description My girlfriend loves 7 very much, she thinks it is lucky! If an integer contains one or more 7, she will think it is lucky too! Input The first line has one integer T (1 <= T <= 100), means there are T test cases. Output For each test case, if X contains one or more 7, output “Lucky” (without quotation marks), otherwise output “Unlucky” (without quotation marks). Sample Input 4
7
11
568
17171
Sample Output Lucky
Unlucky
Unlucky
Lucky
|
HINT
我們主要通過這個題目來感受一下一個完整的ACM競賽的題目應當是什麽樣的。
ACM競賽題目本身的“格式”很明顯:
第一部分是對題目的描述,會交待題目的背景,以及你需要編程完成哪些任務等等。
第二部分是對輸入的約定,會告訴你題目是否有多組測試數據,每組測試數據的格式,每個參數的類型(整數,浮點數,字符串等)以及取值範圍等等。
第三部分是對輸出的約定,也就是你的程序應當輸出哪些內容以及具體的格式是什麽。
第四部分是一些樣例,這些例子只是向你展示一部分測試數據以及對應的答案,目的是更好地幫助你理解題意,以及了解對輸出格式的要求等。
大家也許會和我當初剛接觸ACM時一樣心中充滿了疑問,在這裏我就為大家列舉幾個常見的問題:
<1> 如果題目有多組數據,我們是不是也要像樣例那樣把所有的結果先都計算出來,然後再一起輸出?
這個是沒必要的,你完全可以每處理完一組數據之後就立刻將這組數據對應的結果輸出出來。
但如果你是手動去敲這些樣例的話,你會發現在屏幕上輸入和輸出是混在一起的,並不像樣例那樣輸入和輸出是分離的,這樣會不會不符合要求呢?那麽請看<2>,相信你的疑問就會被解答了。
<2> OJ (Online Judge)怎麽知道我的程序是不是寫對了?
OJ並不會去智能化地分析你的代碼正確與否,而是用另一種巧妙的思路來判斷你的程序是否符合要求:“餵”給你的程序一些輸入數據(就像你在鍵盤上敲一些東西後敲回車一樣),之後再將你的程序“產出”的東西(就像你在屏幕上看到的你的程序輸出的東西一樣)和標準的答案進行對比,如果你的程序得到的答案和標準的答案一模一樣,那麽就算你通過了這個題目。
因此,即使你手動輸入樣例時屏幕上的輸入和輸出是混在一起也沒關系,只要你的程序“產出”的東西和標準答案一模一樣就可以了。
也正是這種評判機制的關系,你不應當讓程序打印一些提示語句,如“Please input two integers”等等,因為凡是你的程序輸出的內容都會被拿來和標準答案進行對比,一旦輸出了類似這樣的題目沒有要求輸出的語句,就會和標準答案大相徑庭了,自然就會認為你的程序是不正確的了。
值得一提的是,盡管這樣的評判機制似乎並不能完美地知道你的程序究竟是不是對的(想想看為什麽?),不過如果測試數據足夠強大的話,“你的程序是對的”的概率就會很高很高了。
<3> 為什麽我的程序通過了所有的樣例,但是最後還是過不了這個題目?
題目的樣例只是一小部分測試數據,目的是為了更好地幫助你理解題意,以及了解對輸出格式的要求等,因此通過了樣例並不能夠代表能通過所有的測試數據。只有通過了所有的測試數據才能得到“Accept”,也就是通過了這個題目。
<4> 每組測試數據的答案輸出完之後,是否都要換行?
是的,即使題目裏面沒有明確說明,我們也應該在每組測試數據的答案輸出完之後再輸出一個“換行”(也就是“\n”),就像樣例示意的那樣。
接下來我們談談這個題目的思路吧,相信大家應該都想到算法了:只要依次判斷讀入的整數的每一位是否是7就可以了。
題解
1 #include <iostream> 2 #include<cstring> 3 /* run this program using the console pauser or add your own getch, system("pause") or input loop */ 4 using namespace std; 5 char c[10]; 6 int main(int argc, char** argv) { 7 ios_base::sync_with_stdio(false); 8 int t; 9 cin>>t; 10 while(t--) 11 { 12 cin>>c; 13 int flag=0; 14 for(int i=0;i<strlen(c);i++) 15 { 16 if(c[i]==‘7‘) 17 flag=1; 18 } 19 if(flag) 20 cout<<"Lucky"<<endl; 21 else 22 cout<<"Unlucky"<<endl; 23 } 24 25 return 0; 26 }
我們都知道C++的運行速度不如C的,那麽主要的原因是C++的輸入輸出流兼容了C的輸入輸出,因此,C++的速度才會變慢,如果我去掉C++的輸入輸出的兼容性的話,速度就可C的差不多了。上面的紅色代碼即為去掉兼容性,可提高速度。
CSU OJ 1340 A Sample Problem