|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
害死人不偿命的(3n+1)猜想如题
#include<stdio.h>
int main()
{
int i,n;
i=0;
n=0;
scanf("%d",&n);
while(n!=1)
{
if(n%2==0)
{
n=n/2;
i++;
}
if(n%2!=0&&n!=1)
{
n=(3*n+1)/2;
i++;
}
}
printf("%d",i);
return 0;
}//代码1正确
#include<stdio.h>
int main()
{
int i,n;
i=0;
n=0;
scanf("%d",&n);
while(n!=1)
{
if(n%2==0)
{
n=n/2;
i++;
}
else//这里改写为else依然正确
{
n=(3*n+1)/2;
i++;
}
}
printf("%d",i);
return 0;
}
但是当改写为do...while后使用else就会导致一个答案报错
而使用if(%n!=0&&n!=1)却是正确答案。
为什么do...while和while会有这样的差别呢?
我还是有点懵
我将你开头的代码改成 do while
- #include<stdio.h>
- int main()
- {
- int i,n;
- i=0;
- n=0;
- scanf("%d",&n);
- do
- {
- if(n%2==0)
- {
- n=n/2;
- i++;
- }
- else//这里改写为else依然正确
- {
- n=(3*n+1)/2;
- i++;
- }
- }while(n!=1);
- printf("%d",i);
- return 0;
- }
复制代码
现在与 while语句的区别是:当输入为 1 while直接跳出,结果打印0,而do while 却不会最后打印 2
所以这两者还是有点区别的
|
|