ในปัญหานี้ เราได้รับหมายเลขและหน้าที่ของเราคือตรวจสอบว่าหมายเลขนั้นเป็นหมายเลข Woodall หรือไม่
หมายเลขลายไม้ เป็นตัวเลขชนิดพิเศษที่มีรูปแบบ
Wn = n.2n -1
5 หมายเลข Woodall แรกคือ 1, 7, 23, 63, 159
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
อินพุต
X = 159
ผลลัพธ์
Yes
เพื่อแก้ปัญหานี้ เราจะสังเกตตัวเลข ถ้าตัวเลขเป็นคู่ จะไม่สามารถ Woodall แล้วตรวจสอบหมายเลข ในการตรวจสอบ ให้บวกตัวเลขด้วย 1 แล้วหารตัวเลขซ้ำด้วย 2 หลังจากที่แต่ละส่วนนับจำนวนครั้งที่หารลงตัวแล้ว และในแต่ละจุดให้ตรวจสอบว่าการนับเท่ากับตัวเลขหรือไม่
โปรแกรมแสดงการใช้งานโซลูชันของเรา
ตัวอย่าง
#include <iostream>
using namespace std;
bool isWoodallNumber(int x){
if (x % 2 == 0)
return false;
if (x == 1)
return true;
x+= 1;
int p = 0;
while(x%2 == 0){
x = x/2;
p++;
if (p == x)
return true;
}
return false;
}
int main() {
int x = 1424;
cout<<x;
(isWoodallNumber(x))?cout<<" is a Woodal Number":cout<<" is not a Woodal Number";
return 0;
} ผลลัพธ์
1424 is not a Woodal Number