ได้รับตัวเลขสองจำนวน start และ end แทนช่วง เป้าหมายคือหาจำนวนเลข Unary (Unary numbers) ที่อยู่ในช่วง [start, end]
เราสามารถตรวจสอบได้ว่าเลขเป็น Unary หรือไม่ ด้วยขั้นตอน: ถ้าเลข 13 แล้ว 12 + 32 = 10 แล้ว 12 + 02 = 1 ผลรวมสุดท้ายเป็น 1 ดังนั้น 13 เป็น Unary
ตัวอย่าง
Input
start=1 end=20
Output
Count of Unary Numbers in a Range are: 5
Explanation
The numbers are: 1, 7, 10, 12, and 13
Input
start=50 end=100
Output
Count of Unary Numbers in a Range are: 7
Explanation
The numbers are: 59, 63, 67, 74, 75, 78, and 89
วิธีการที่ใช้ในโปรแกรม
ระหว่าง 1 ถึง 9 เลข 1 และ 7 เป็น Unary สำหรับตัวเลขอื่น จะใช้ผลรวมกำลังสองของหลักต่างๆ จนได้ 1 ทำซ้ำขั้นตอนนี้สำหรับทุกตัวเลขในช่วง เพิ่ม count สำหรับเลข Unary ที่เจอ
- รับจำนวนเต็ม
start,endเป็นอินพุต - ฟังก์ชัน
check_unary(int number)คืนค่า true ถ้าเป็น Unary มิฉะนั้น false - ฟังก์ชัน
Unary_range(int start, int end)คืนค่าจำนวนเลข Unary ในช่วง - กำหนดจำนวนนับเริ่มต้นเป็น 0 ลูปจาก i=start ถึง end ถ้า
check_unary(i)เป็น true เพิ่ม count - ใน
check_unary(int number)ตัวแปรชั่วคราวtotal - ถ้า N เป็น 1 หรือ 7 คืนค่า true คืนค่า false สำหรับเลขอื่นน้อยกว่า 10 (number/10 == 0)
- ใน while loop คำนวณผลรวมกำลังสองของหลักต่างๆ
- เรียก
check_unary(total)ซ้ำจนผลรวมกลายเป็น 1 - คืนค่า count เป็นผลลัพธ์
ตัวอย่างโค้ด
#include <iostream>
using namespace std;
bool check_unary(int number){
int total = 0;
if (number == 1 ){
return true;
}
else if(number == 7){
return true;
}
else if (number / 10 == 0){
return false;
}
while (number != 0){
int temp = number % 10;
total = total + temp * temp;
number = number / 10;
}
return check_unary(total);
}
int Unary_range(int start, int end){
int count = 0;
for (int i = start; i <= end; i++){
if (check_unary(i) == 1){
count++;
}
}
return count;
}
int main(){
int start = 200, end = 400;
cout << "Count of Unary Numbers in a Range are: " << Unary_range(start, end);
return 0;
}
Output
หากรันโค้ดข้างต้นจะได้ผลลัพธ์ดังนี้:
Count of Unary Numbers in a Range are: 31