กำหนดช่วงตัวเลขระหว่าง start และ end เป้าหมายคือหาจำนวนตัวเลขที่มีหลักแรกเท่ากับหลักสุดท้ายและอยู่ในช่วง [start, end]
ตัวเลขหลักเดียวทั้งหมดจะถูกนับถ้าอยู่ในช่วง
ทำความเข้าใจด้วยตัวอย่าง
ตัวอย่าง
Input - start = 100, end = 200
Output - จำนวนตัวเลขในช่วงที่หลักแรกเท่ากับหลักสุดท้ายคือ: 10
คำอธิบาย - ตัวเลขจะเป็น:
101, 121, 131, 141, 151, 161, 171, 181 และ 191
Input - start = 1, end = 10
Output - จำนวนตัวเลขในช่วงที่หลักแรกเท่ากับหลักสุดท้ายคือ: 9
คำอธิบาย - ตัวเลขหลักเดียวทั้งหมดจะถูกนับ 1, 2, 3, 4, 5, 6, 7, 8, 9
แนวทางที่ใช้ในโปรแกรมด้านล่าง
ตัวเลขหลักเดียวทั้งหมดถ้าอยู่ในช่วง [start, end] จะถูกนับ ตอนนี้สำหรับแต่ละตัวเลขตรวจสอบหลักแรกและหลักสุดท้าย ถ้าหลักแรกมากกว่าหลักสุดท้าย ให้บวก 8 + val/10 เข้า count ถ้าน้อยกว่า ให้บวก 9 + val/10 เข้า count โดย val คือตัวเลขปัจจุบันในการเรียกซ้ำ range(int val)
- รับจำนวนเต็ม start และ end เป็นตัวแปรช่วง
- ตั้ง count = range(end) - range(start)
- ฟังก์ชัน range(int val) รับจำนวนเต็มและคืนค่าจำนวนตัวเลขในช่วงที่หลักแรกเท่ากับหลักสุดท้าย
- ตั้ง count เริ่มต้นเป็น 0
- รับ end เป็นหลักสุดท้ายคือ val % 10
- คืนค่า val ถ้าเป็นตัวเลขหลักเดียว (น้อยกว่า 10)
- ตอนนี้ใช้ while loop คำนวณ start = val % 10 ลด val ลง 10 ดังนั้น start จะมีหลักแรก
- ตอนนี้ถ้า start <= end บวก 9 + set_val / 10 เข้า count
- ตอนนี้ถ้า start > end บวก 8 + set_val / 10 เข้า count
- ในที่สุดคืนค่า count เป็นผลลัพธ์
ตัวอย่าง
#include <iostream>
using namespace std;
int range(int val) {
int count = 0;
int start;
int end = val % 10;
int set_val = val;
if (val < 10) {
return val;
}
end = val % 10;
while (val) {
start = val % 10;
val = val / 10;
}
if (start <= end) {
count = 9 + set_val / 10;
} else {
count = 8 + set_val / 10;
}
return count;
}
int main() {
int start = 10, end = 50;
int count = range(end) - range(start);
cout << "Count of Numbers in Range where first digit is equal to last digit of the number are: " << count;
return 0;
}
หากเรารันโค้ดข้างต้น จะได้ผลลัพธ์ดังนี้
ผลลัพธ์
Count of Numbers in Range where first digit is equal to last digit of the number are: 4