ในปัญหานี้ เราได้รับหมายเลขและหน้าที่ของเราคือตรวจสอบว่าหมายเลขนั้นเป็นหมายเลข 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