คำชี้แจงปัญหา
กำหนดจำนวนเต็มบวกสองจำนวน N และ K ค้นหาจำนวนหลักขั้นต่ำที่สามารถลบออกจากตัวเลข N ได้ โดยที่หลังจากลบออกแล้ว ตัวเลขจะหารด้วย 10K ลงตัว พิมพ์ -1 ถ้าเป็นไปไม่ได้
ตัวอย่าง
ถ้า N =10203027 และ K =2 เราต้องลบ 3 หลัก ถ้าเราลบ 3, 2 และ 7 ออก ตัวเลขจะกลายเป็น 10200 ซึ่งหารด้วย 102 ลงตัว
อัลกอริทึม
<ก่อน>1. เริ่มการข้ามผ่านหมายเลขจากจุดสิ้นสุด หากตัวเลขปัจจุบันไม่ใช่ศูนย์ ให้เพิ่มตัวแปรตัวนับ มิฉะนั้น ให้ลดตัวแปร K2 ถ้า K เป็นศูนย์ ให้คืนค่าตัวนับเป็นคำตอบที่ 3 หลังจากข้ามจำนวนเต็มแล้ว ให้ตรวจสอบว่าค่าปัจจุบันของ K เป็นศูนย์หรือไม่ หากเป็นศูนย์ ให้คืนค่าตัวนับเป็นคำตอบ มิฉะนั้น ให้คืนค่าคำตอบเป็นตัวเลขใน N –14 หากตัวเลขที่ระบุไม่มีศูนย์ ให้คืนค่า -1 เป็นคำตอบตัวอย่าง
#includeใช้เนมสเปซ std;int getBitsToBeRemoved (int n, int k) { string s =to_string (n); ผลลัพธ์ int =0; int zeroFound =0; สำหรับ (int i =s.size () - 1; i>=0; --i) { if (k ==0) { ส่งคืนผลลัพธ์; } ถ้า (s [i] =='0') { zeroFound =1; --k; } อื่น ๆ { ++ผลลัพธ์; } } if (!k) { ส่งคืนผลลัพธ์; } อื่น ๆ ถ้า (zeroFound) { return s.size() - 1; } return - 1;}int main() { int n =10203027; int k =2; cout <<"ต้องมีการลบขั้นต่ำ =" < เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ดังต่อไปนี้
ผลลัพธ์
ลบขั้นต่ำที่จำเป็น =3