เราได้รับช่วงเวลา [ก่อน, ท้าย] เป้าหมายคือการหาจำนวนตัวเลขที่มีหลักแรกและหลักสุดท้ายเหมือนกันภายในช่วงเวลานี้ ตัวอย่างเช่น 232 มีหลักแรกและหลักสุดท้ายเหมือนกันกับ 2
เราจะทำสิ่งนี้โดยข้ามจาก i=first ไปยัง i=last สำหรับแต่ละตัวเลข ฉันจะเปรียบเทียบตัวเลขตัวแรกกับหลักสุดท้าย หากมีจำนวนเพิ่มขึ้นเท่ากัน
มาทำความเข้าใจกับตัวอย่างกัน
ป้อนข้อมูล − first=8 สุดท้าย=40
ผลผลิต − การนับตัวเลขที่มีหลักแรกและหลักสุดท้ายเหมือนกัน − 5
คำอธิบาย − ตัวเลขระหว่าง 8 ถึง 40 ที่มีหลักแรกและหลักสุดท้ายเหมือนกัน -
8, 9, 11, 22, 33
ป้อนข้อมูล − แรก=100 สุดท้าย=200
ผลผลิต − การนับตัวเลขที่มีหลักแรกและหลักสุดท้ายเหมือนกัน:5
คำอธิบาย − ตัวเลขระหว่าง 100 ถึง 200 ที่มีหลักแรกและหลักสุดท้ายเหมือนกัน -
101, 111, 121, 131, 141, 151, 161, 171, 181, 191.
แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้
-
เราใช้จำนวนเต็มสองตัวก่อนและตัวสุดท้ายเพื่อกำหนดช่วง [first,last]
-
ฟังก์ชัน getFirstDigit(int num) รับค่าตัวเลขและคืนค่าหลักแรก
-
ในขณะที่ num>=10 ให้หาร num ด้วย 10 ในตอนท้าย num จะมีหลักแรก ส่งคืนค่านี้
-
ฟังก์ชัน getCount(int fst,int lst) รับตัวแปรช่วงและส่งกลับจำนวนตัวเลขที่มีตัวเลขหลักแรกและหลักสุดท้ายเหมือนกัน
-
นับเริ่มต้นเป็น 0
-
ใช้ for loop start จาก i=fst ถึง i=lst สำหรับแต่ละ i คำนวณเป็นตัวเลขหลักแรกโดยเรียก getFirstDigit(i) และเก็บไว้ใน fdigit (fdigit=getFirstDigit(i)).
-
คำนวณหลักสุดท้ายเป็น ldigit=i%10.
-
ถ้า ldigit==fdigit แสดงว่าเหมือนกัน จำนวนที่เพิ่มขึ้น
-
ผลตอบแทนนับเป็นผลลัพธ์
ตัวอย่าง
#include <bits/stdc++.h> using namespace std; //to find starting digit int getFirstDigit(int num){ while (num >= 10) { num = num/ 10; } return num; } int getCount(int fst,int lst){ int count=0; for(int i=fst;i<=lst;i++){ int fdigit=getFirstDigit(i); int ldigit=i%10; //to get last digit if(fdigit==ldigit) //if both are equal increment count { ++count; } } return count; } int main(){ int first = 10, last = 23; cout<<"Numbers with same first and last digits:"<<getCount(first, last); return 0; }
ผลลัพธ์
หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -
Numbers with same first and last digits:2