เราได้รับช่วงเวลา [ก่อน, ท้าย] เป้าหมายคือการหาจำนวนตัวเลขที่มีหลักแรกและหลักสุดท้ายเหมือนกันภายในช่วงเวลานี้ ตัวอย่างเช่น 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