Tribonacci数程序不返回false



对于从标准输入中读取的每个数字,如果它是Tribonacci数,程序应该打印YES,否则打印NO。我在我的程序中做错了什么,它打印YES,但当数字不是tribonacci数字时,它不会打印NO。例如,当number为45时,它应该打印no.

Tribonacci数公式

T0=0
T1=1
T2=2
Tn=Tn-1 + Tn-2 + Tn-3 (for n>2)
using namespace std;
bool isTrib(int n) {
if(n==0 || n == 1 || n == 2) {
return true;
}
if(n > 2) {
int trib = isTrib(n-1)+isTrib(n-2)+isTrib(n-3);
if(trib == n) {
return true;
}
}
return false; 
}

int main()
{
int n;
while(cin>>n) {
bool result = isTrib(n);
cout << result;
result == 1 ? cout << "YES" << endl : cout << "NO" << endl;
}
return 0;
}

你把两件事混在一起了:实际的tribonacci数和"真"/"假"回答"N是否为三角"的问题,例如代码中的变量trib可以是0、1、2或3,它不能取任何其他值,但你试图将其与实数进行比较,即苹果与橘子

这里是固定版本:

bool isTrib(int n) {
if(n==0 || n == 1 || n == 2) {
return true;
}

int n1 = 0;
int n2 = 1;
int n3 = 2;

int trib = n1 + n2 + n3;
while (trib <= n) {
if (trib == n) return true;

n1 = n2;
n2 = n3;
n3 = trib;
trib = n1 + n2 + n3;
}
return false;
}

int main()
{
int n;
while(cin>>n) {
bool result = isTrib(n);
cout << (result ? "YES" : "NO") << endl;
}
return 0;
}

最新更新