#include<iostream>
int main()
{
int n,i=0;
std::cout << "Enter number:" << std::endl;//这一项多余,放在pta中反而不通过
std::cin >> n;
while(n!=1)
{
if(n%2==0)
{
n=n-n/2;
i++;
}
else
{
n=(3*n+1)-(3*n+1)/2;
i++;
}
}
std::cout << i;
}
心得:
①这道题第一遍做的时候将n=(3n+1)-(3n+1)/2不小心写成了n=(3n-1)-(3n-1)/2导致怎么测试都得不到正确答案。由于当时是在下午写得不得不说人一到下午精力是真的差啊,这种小错误都会犯。隔天晚上一调试就发现了问题的所在,断点真是个好东西!!
优化版
#include<iostream>
int main()
{
int n,i=0;
std::cout << "Enter number:" << std::endl;//这一项多余,放在pta中反而不通过
std::cin >> n;
while(n!=1)
{
if(n%2==0)
{
n=n-n/2;
}
else
{
n=(3*n+1)/2;//原式是n=(3*n+1)-(3*n+1)/2;其实可以直接化解,虽然理解起来没有前面那么直观
}
i++;//之前是在两条分支语句中都使用了i++,干脆直接“提公因式”将这条语句放到两条分支之外
}
std::cout << i;
}