首页 > 试题广场 >

程序的输出为( )

[单选题]
#include<bits/stdc++.h>
using namespace std;
int solve(int x){
if(x == 0 || x == 1){
return x;
}
if(x % 2 == 0){
return 1 + solve(x / 2);
}
else{
return 1 + solve((x + 1) / 2);
}
}
int main(){
int n = 100;
int ans = solve(n);
cout<<ans<<endl;
return 0;
}


程序的输出为(      )
  • 6
  • 7
  • 8
  • 9
solve(100)
    =1+solve(50)
    =1+(1+solve(25))
    =1+(1+(1+solve(14)))
    =1+(1+(1+(1+solve(7))))
    =1+(1+(1+(1+(1+solve(4)))))
    =1+(1+(1+(1+(1+(1+solve(2))))))
    =1+(1+(1+(1+(1+(1+(1+solve(1)))))))
    =8
发表于 2019-09-27 13:53:44 回复(0)
流程:
                       --->%2==0;   1+slove(n/2)                          √
     n = 100
                       --->%2!=0;    1+ slove((n+1)/2)
流程:
                       --->%2==0;   return 1+slove(n/2)                
     n = 50
                       --->%2!=0;    return 1+ slove((n+1)/2)
流程:
                       --->%2==0;   return 1+slove(n/2)
      n = 25
                       --->%2!=0;    return 1+ slove((n+1)/2)         
流程:
                       --->%2==0;   return 1+slove(n/2)
      n = 13
                       --->%2!=0;    return 1+ slove((n+1)/2)          

流程:
                       --->%2==0;   return 1+slove(n/2)
       n = 7
                       --->%2!=0;    return 1+ slove((n+1)/2)           

流程:
                       --->%2==0;   return 1+slove(n/2)                   
       n = 4
                       --->%2!=0;    return 1+ slove((n+1)/2)

流程:
                       --->%2==0;   return 1+slove(n/2)                   
        n = 2
                       --->%2!=0;    return 1+ slove((n+1)/2)

流程:

        n = 1     (n == 0 || n == 1)    return n                                


综上所述:
ans = 1 + slove(100/2)+
       = 2 + slove((25+1)/2)+  
       = 3 + slove((13+1)/2)+
       = 4 + slove((7+1)/2)+
       = 5 + slove(4/2)+
       = 6 + slove(2/2)+
       = 7 + slove(1)
       = 8
ans=8

正确答案------C





发表于 2019-10-06 13:22:17 回复(0)
solve(100) = 1 + solve(50) 
                  = 2 + solve(25) 
                  = 3 + solve(13)                   // (25+1)/2 = 13
                  = 4 + solve(7)                     // (13 + 1 ) / 2 = 7
                  = 5 + solve(4)                     // (7 + 1) / 2 = 4
                  = 6 + solve(2)
                  = 7 + solve(1)                    // solve(1) = 1
                  = 8
发表于 2019-09-29 10:14:44 回复(0)