Trong bài toán này, chúng ta được cho một số và nhiệm vụ là kiểm tra xem số đó có phải là số Woodall hay không.
Số Woodall là loại số đặc biệt có dạng,
Wn = n.2n -1
5 số Woodall đầu tiên là 1, 7, 23, 63, 159
Hãy xem ví dụ để hiểu bài toán,
Đầu vào
X = 159
Đầu ra
Yes
Để giải bài toán này, chúng ta sẽ quan sát số, nếu số chẵn thì không thể là Woodall và sau đó kiểm tra số. Để kiểm tra, cộng số với 1 và chia đệ quy số cho 2. Sau mỗi lần chia đếm số lần nó chia hết. Và tại mỗi điểm kiểm tra nếu đếm bằng số.
Chương trình triển khai giải pháp,
Ví dụ
#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<<" là số Woodall":cout<<" không phải số Woodall"; return 0; }Đầu ra
1424 không phải số Woodall