第九周上机考试————哈利波特去学校

题目:

/*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的格式标准进行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值