สมมติว่าเรามีอาร์เรย์ A ขนาด n และตัวเลข x เลขลัคกี้คือจำนวนบวกที่ตัวเลขทศนิยมประกอบด้วย 4 และ 7 เท่านั้น จาก n จำนวนเต็มบวกที่กำหนด ต้องนับว่ามีกี่จำนวนที่มีตัวเลขลัคกี้ไม่เกิน k ตัว
เช่น ถ้าอินพุตคือ A = [44, 74, 474, 154]; k = 2 เอาต์พุตจะเป็น 3 เพราะมีเลขลัคกี้ 44, 74, 474 แต่ 474 มีตัวลัคกี้ 3 ตัวเกิน k และ 154 มี 1 ตัวผ่าน
ขั้นตอนการแก้ปัญหา
n := ขนาดของ A
f := 0
for i := 0 ถึง n-1:
c := 0
while A[i] != 0:
if A[i] mod 10 == 4 หรือ 7: เพิ่ม c ขึ้น 1
A[i] := A[i] / 10
if c <= k: เพิ่ม f ขึ้น 1
return f
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A, int k) {
int n = A.size();
int f = 0;
for (int i = 0; i < n; ++i) {
int c = 0;
while (A[i] != 0) {
if (A[i] % 10 == 4 || A[i] % 10 == 7) c++;
A[i] /= 10;
}
if (c <= k) f++;
}
return f;
}
int main() {
vector<int> A = {44, 74, 474, 154};
int k = 2;
cout << solve(A, k) << endl;
}
อินพุต
{44, 74, 474, 154}, 2
เอาต์พุต
3