บทช่วยสอนนี้จะอภิปรายการแสดงตัวเลขเป็นผลรวมของ pseudo-binary numbers น้อยที่สุด Pseudo-binary numbers คือตัวเลขที่ประกอบด้วยเฉพาะหลักเลขฐานสอง คือ 0 และ 1 ตัวอย่างของ pseudo-binary numbers ได้แก่ 00, 11, 10, 100, 111, 1011 ฯลฯ
ด้านล่างคือตัวอย่างบางส่วนของตัวเลขที่แสดงเป็นผลรวมของ pseudo-binary numbers
Input : 23 Output : 11 + 11 + 1 คำอธิบาย : 23 = 11 + 11 + 1 ผลรวมของ pseudo-binary numbers (11, 11, 1) คือ 23 Input : 50 Output : 10 + 10 + 10 + 10 + 10
วิธีการหาคำตอบ
ด้านล่างคือหนึ่งในวิธีที่ดีที่สุดในการหา pseudo-binary numbers น้อยที่สุดเพื่อแสดง N
- นำตัวเลข X มาและอัปเดตหลักของมันเป็น 1 หรือ 0 ตามหลักของตัวเลข N
- ตรวจสอบหลักที่แต่ละตำแหน่งของ N
- ถ้าเป็น 0 ให้อัปเดตตำแหน่งนั้นของ X เป็น 0
- ถ้าไม่เป็นศูนย์ ให้อัปเดตตำแหน่งนั้นของ X เป็น 1
- สมมติ N = 32 แล้ว X จะเป็น 11
- X จะเป็น pseudo-binary number หนึ่งตัว
- ตอนนี้ลด N ลงด้วย X และทำซ้ำขั้นตอน 1 จนกว่า N จะกลายเป็นศูนย์
ตัวอย่าง
โค้ด C++ สำหรับวิธีข้างต้น
#include<iostream>
using namespace std;
int main(){
int N = 51;
// หา pseudo-binary number จนกว่า N จะเป็น 0
cout << "pseudo-binary representation of " << N << " is: ";
while (N > 0){
// หา X ที่ประกอบด้วย 0 และ 1 ตาม N
int temp = N;
int X = 0, bit = 1;
// ตรวจสอบแต่ละตำแหน่งของ N ว่าเป็นศูนย์หรือไม่
while (temp != 0){
int last_dig = temp % 10;
temp = temp / 10;
if (last_dig != 0)
X += bit;
bit *= 10;
}
// พิมพ์ pseudo-binary number หนึ่งตัว
cout << X << " ";
// อัปเดต N โดยการลบด้วย X
N = N - X;
}
return 0;
}
ผลลัพธ์
pseudo-binary representation of 51 is: 11 10 10 10 10
การเข้าใจโค้ด
- ลูป while ภายนอกสำหรับรับ N และเลือกหลักที่ทุกตำแหน่งเพื่อหา X
- เราอัปเดตค่าตัวแปร temp ด้วย N และลูปภายในสำหรับตรวจสอบแต่ละตำแหน่งของตัวแปร temp และอัปเดตตำแหน่งนั้นของตัวแปร X
- พิมพ์ค่าของ X เพราะนั่นคือ pseudo-binary number หนึ่งตัว
- เราอัปเดต N โดยการลบด้วย X และไปที่ลูปภายนอกอีกครั้งจนกว่า N จะกลายเป็น 0
สรุป
ในบทช่วยสอนนี้ เราอภิปรายวิธีที่เราสามารถแสดงตัวเลขเป็นผลรวมของ pseudo-binary numbers น้อยที่สุดได้ เราอภิปรายวิธีการหา pseudo-binary numbers ทั้งหมด เรายังอภิปรายโค้ด C++ สำหรับปัญหานี้ ซึ่งเราสามารถเขียนในภาษาโปรแกรมมิ่งอื่นๆ เช่น C, Java, Python ฯลฯ ได้ เราหวังว่าบทช่วยสอนนี้จะเป็นประโยชน์