yorkklause的个人博客分享 http://blog.sciencenet.cn/u/yorkklause

博文

UVa 100 解题小结——坑,遍地都是坑!

已有 8719 次阅读 2012-12-21 21:24 |个人分类:UVa|系统分类:科研笔记| UVa100

今天接受同学的建议,开始刷UVa的编程题。之前一直在用C写程序,这次第一次写C++,感觉很爽,输入输出比C用的方便。第一次做UVa的题,整体感觉好坑!可能是自己一直没有一个程序员的思维,缺乏对于漏洞的探查。
题目描述:
对于任意一个输入的数字n,若n为基数,则执行n=3n+1,若n为偶数,则执行n=n/2,直至n=1。期间循环次数为m。
求对于任意输入数字对i,j。在两数之间,包含两数的数字中,循环次数的最大值。
输入格式
1 10
输出格式
1 10 20

代码:
# include <iostream>
using namespace std;

int main()
{
long n1(0),n2(0);
while(cin>>n1>>n2)
{
long max=0;
bool change = false;
if(n1>n2)
{
long m=n1;
n1=n2;
n2=m;
change=true;
}
for(long i=n1; i<=n2;++i)
{
long count=1;
long k=i;
while(k!=1)
{
if(k%2==1)
k=3*k+1;
else
k/=2;
++count;
}
if(max<count)max=count;
}
if(change)
cout<<n2<<" "<<n1<<" "<<max<<endl;
else
cout<<n1<<" "<<n2<<" "<<max<<endl;
}
return 0;
}

题中存在一个大坑,(主要是因为自己太naive)题目给的测试用例中都是第一个输入数字小于第二个,我就想当然认为输入都是这样,没有考虑到数字大小关系颠倒的情况,所以导致提交了一晚上都是Wrong。收到N多封邮件说我wrong answer。后来,参考了网上别人的题目,才发觉这个大坑。
网上都说生物是坑,现在看来,当你naive的时候,遍地都是坑!



https://wap.sciencenet.cn/blog-723765-645097.html

上一篇:不再迷茫
下一篇:UVa 101 解题小结——要认真读题!切记!切记!
收藏 IP: 202.127.20.*| 热度|

1 刘洋

该博文允许注册用户评论 请点击登录 评论 (2 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-5-12 19:55

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部