สมมติว่าเราได้รับจำนวนเต็ม k เราเรียกว่าตัวเลขเป็น "ตัวเลขพิเศษ" ถ้าตัวเลขทุกหลักมีค่าเท่ากัน เช่น 1, 11, 1111 เรานับตัวเลขพิเศษตามลำดับ 1, 11, 111, 1111, 2, 22, 222, 2222, 3, 33, 333, 3333, และต่อไป เราต้องหาจำนวนหลักตัวเลขรวมในตัวเลขพิเศษจนถึง k ค่า k ไม่เกิน 10000
เช่น ถ้าค่าที่ป้อนเข้าเป็น k = 9999 ผลลัพธ์จะได้ 90
ขั้นตอนการแก้ปัญหา
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนดังนี้:
s := แปลง k เป็นสตริง กำหนดอาร์เรย์ v ขนาด: := {0, 1, 3, 6, 10} พิมพ์(((s[0] - '0') - 1) * 10 + v[ความยาวของ s])
ตัวอย่างโค้ด
ดูการนำไปใช้จริงด้านล่างเพื่อความเข้าใจที่ดียิ่งขึ้น:
#include <bits/stdc++.h> using namespace std; #define N 100 void solve(int k) { string s = to_string(k); int v[] = {0, 1, 3, 6, 10}; cout<< ((s[0] - '0') - 1) * 10 + v[s.length()] << endl; } int main() { int k = 9999; solve(k); return 0; }
ข้อมูลนำเข้า
9999
ข้อมูลส่งออก
90