以下是UVA 100题的解析与答案
(所谓解析,就是能让别人不看代码也能想出代码的样子。所谓答案,就是即使不执行程序,也能看出正确的结果)
100 - The 3n + 1 problem
解析:这题对于初学者来说是比较难的,对于有一定经验的Acmer来说更难。
前者因为这题需要考虑两个关键点:i,j的大小顺序和变量合理初始化。
后者因为这题需要考虑是否会超时,很难实现题目要求的范围。
(本人电脑上运行不起,绝对超时,在UVA上只用了0.4秒~~~~)
1 #include <iostream> //UVAOJ没有iostream.h文件
2 #include <string>
3 using namespace std;
4 int main() //标准格式
5 {
6 //真正好的编程风格,是能让看到的人相信这个程序是完美至极的。
7 int i,j;
8 while(cin>>i>>j){ //等同于while(scanf("%d %d",&i,&j)!=EOF)
9 int n,m,max=0;
10 i<j?(n=i,m=j):(n=j,m=i);
11 m/2>n?(n=m/2):0; //简单剪枝
12 int x,y;
13 for(x=n;x<=m;x++){
14 y=x;
15 int tmp=1;
16 while(y!=1){
17 if(y%2) //省略了一次运算
18 y=y*3+1;
19 else
20 y=y>>1; //高效运算
21 tmp++;
22 }
23 if(tmp>max)
24 max=tmp;
25 }
26 cout<<i<<' '<<j<<' '<<max<<endl;
27 }
28 return 0;
29 }
注意,本文没有结束!
C++是C语言的超集,虽然我只学了2个小时的C++,学会了几个单词,对象和类的概念,还有怎么在VC6.0上运行程序。
好像某些职校在大一就安排C++课程,好像很少有人能够用C++AC这题吧。
这是ACM的强大力量,如果把编程分为两类的话,一类是软件开放,它是真正能赚钱的行业,但是现在我们都做不到。另一类是ACM题,以简约的形式考察编程能力,却需要不输于开放大型软件能力,如果仅仅把ACM看成是对算法的提升,那就太浪费了!
ACM对Acmer有以下作用:
培养团队协作能力;
培养吃苦耐劳的意志;
培养学习能力;
提升英语水平;
提升专业英语水平;
提升思维能力与敏锐的判断力;
提升编程水准、编程素养、算法能力;
提升调试代码、测试代码、程序分析的能力;
提升撰写文档的能力,比如我现在做的;
提升阅读代码的能力,比如你刚才做到;
综上所述,ACM除了对你如何记忆马克斯主义没有作用外,都对你有极大的提升。
必然,一个获奖的Acmer——一个充分得到提升的Acmer,会得到谷歌、百度等公司的应聘!
原文链接: https://www.cnblogs.com/bmdx/archive/2013/01/15/say_of_acmer.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/75642
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!