[萌新求助】PTA乙级1001提问do...while和while的差别
害死人不偿命的(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 就是不管怎样,先循环一次,再去判断
while 要先判断,条件满足再去循环 你在两个代码结果都一样呀
你输入哪个数字导致不一样的 提交答案导致的报错
我想大概就是do...while要先跑一次的问题 大马强 发表于 2021-9-13 20:58
你在两个代码结果都一样呀
你输入哪个数字导致不一样的
大佬你好
就是在使用while时两个代码都是正确的
我想知道的是仅仅只改变循环体
把while改成do...while为啥就只有if(n%2!=0&&n!=1)正确而else不正确了。
不是说while和do...while可以互换吗?
谢谢 白白胖胖真好 发表于 2021-9-14 09:12
大佬你好
就是在使用while时两个代码都是正确的
我想知道的是仅仅只改变循环体
我还是有点听不懂你说的是啥
配套 if 和 else 只能执行一个,不能够两个都执行
要不你把do while代码发出来 大马强 发表于 2021-9-14 09:41
我还是有点听不懂你说的是啥
配套 if 和 else 只能执行一个,不能够两个都执行
要不你把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++;
}
if(n%2!=0&&n!=1)
{
n=(3*n+1)/2;
i++;
}
}
while(n!=0);
printf("%d",i);
return 0;
}//这个答案正确
#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
{
n=(3*n+1)/2;
i++;
}
}
while(n!=0);
printf("%d",i);
return 0;
}//这个答案错误
我想问的就是比较与while循环
为啥do...while就有一个else的写法会报错 你这两个程序我都运行不出来结果
while(n!=0);
你这里的是中文分号 改完后哪一个输出都没有结果打印 大马强 发表于 2021-9-14 10:48
你这两个程序我都运行不出来结果
你这里的是中文分号
哦哦抱歉
手机打的
大概意思就是这样打
do...while只有在那个if下才能正确
while在if和else下却都正确
想问的就是这个 我还是有点懵
我将你开头的代码改成 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
所以这两者还是有点区别的
页:
[1]