【发布时间】:2016-11-29 12:04:10
【问题描述】:
我需要一个用 c++ 编写的程序来获取一个数字:
循环:
如果该数字是偶数除以 2 (n=n/2) 如果不是,您可以执行以下操作之一: n+1 n-1
循环结束
程序应该这样做直到 n=1。 但它应该以最有效和最快的方式做到这一点,我唯一的提示是我可以使用 DP 方法。 输出应该是用于计算该数字的操作数。 例如:
15->16->8->4->2->1 输出:5
35->36->18->9->8->4->2->1 输出:7
这是我写的代码,但它还没有完成,这是错误的,因为我无法弄清楚我应该如何在每个步骤中添加或减去:
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
int n;
int h=0;
int i=0;
cout<<"Enter A Number:";
cin >> n;
int r=n;
int q=n;
cout<<r;
L1: while ( r % 2 == 0)
{
for(int m=0;r>1 && m==0 ;)
{ r=r / 2;h++;
m=r%2;
cout<<" => "<<r;
}}
while(r%2==1 && r>1)
{r=r-1;cout<<" => "<<r;h++;
goto L1;}
cout<<endl;
//**********************
cout<<q;
L2: while ( q % 2 == 0)
{
for(int m=0;q>1 && m==0 ;)
{ q=q / 2;i++;
m=q%2;
cout<<" => "<<q;
}}
while(q%2==1 && q>1)
{q=q+1;cout<<" => "<<q;i++;
goto L2;}
cout<<endl<<"First:"<<h<<endl<<"Second:"<<i<<endl;
system("pause");
}
【问题讨论】:
-
到目前为止你尝试过什么?
-
有趣的问题。但是你为什么不想自己去尝试一下呢?
-
我会尽量避免显式应用这些操作,而是寻找一种更直接的方法来计算
f(n),这样f就是所需的操作数。我的第一个猜测是尝试找出从n到 2 的幂需要多少步(因为从那时起,获取步数就变得微不足道了) -
任何代码都比没有代码更尴尬:P
-
@Prometheus 对不起,你们是对的,我添加了代码