UVA 100 3n+1

以下是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

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午5:06
下一篇 2023年2月9日 下午5:06

相关推荐