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> 每组测试数据的答案输出完之后,是否都要换行?
是的,即使题目里面没有明确说明,我们也应该在每组测试数据的答案输出完之后再输出一个“换行”(也就是“
”),就像样例示意的那样。
接下来我们谈谈这个题目的思路吧,相信大家应该都想到算法了:只要依次判断读入的整数的每一位是否是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的差不多了。上面的红色代码即为去掉兼容性,可提高速度。