题目:
/*Harry Potter想立刻赶到学校去,假设他和学校处于一条直线上,他一开始处于0点,学校位于X点。在一个单位时间内他可以往前走1格,或者使用魔法把自己变到目前坐标2倍的地方。请问他到学校最少需要多少时间?
输入
第一行是一个整数K,表示样例的个数。 以后每行是一个整数,表示X(0≤X≤10^18)。
输出
每行输出一个整数,表示Harry Potter赶到学校需要的时间。
样例输入 Copy
3 1 10 100
样例输出 Copy
1 5 9*/
问题代码:#include <stdio.h>
int main()
{
int t;
while(scanf("%d",&t)!=EOF)
{
int i;
for(i=1;i<=t;i++)
{
int n;
int k=0;
scanf("%d",&n);
while(n>0)
{ k++;
if(n%2==0)
n/=2;
if(n%2!=0)//你的代码在计算Harry Potter赶到学校所需时间的过程中有一处逻辑错误。在判断n是否为奇数时,你使用了两个独立的if语句,导致只有第一个if的条件满足时才会执行,而第二个if不会被执行。这样会导致在n为奇数时,将n的值减一,但k的值没有相应地增加。
n=n-1;
}
printf("%d\n",k);
}
}
return 0;
}
正确代码:
#include <stdio.h>
int main()
{
int t;
while(scanf("%d",&t)!=EOF)
{
int i;
for(i=1;i<=t;i++)
{
int n;
int k=0;
scanf("%d",&n);
while(n>0)
{ k++;
if(n%2==0)
n/=2;
else if(n%2!=0)
n=n-1;
}
printf("%d\n",k);
}
}
return 0;
}
//在使用if语句判断时,如果条件是俩对立的,必须要严格按照if--else的格式标准进行