ในโปรแกรมนี้ เราจะได้รับคิวรี่ Q แต่ละคิวรีมีจำนวนเต็มบวก N หน้าที่ของเราคือสร้างโปรแกรมเพื่อแก้ปัญหาการสืบค้นเกี่ยวกับผลรวมของเลขคี่ ผลรวมของตัวประกอบทั้งหมดของตัวเลขใน C++
คำอธิบายปัญหา − ในการแก้โจทย์แต่ละข้อ เราต้องหาตัวประกอบทั้งหมดของตัวเลข N แล้วบวกตัวประกอบทั้งหมดที่มีผลรวมหลักเป็นเลขคี่ และส่งคืนผลรวมสุดท้ายสำหรับแต่ละข้อความค้นหา
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
อินพุต
Q = 2, queries = {15, 8}
ผลลัพธ์
8 1
คำอธิบาย
สำหรับข้อความค้นหา 1:N =15 ตัวประกอบของ 15 คือ 1, 3, 5, 15
ผลรวมของเลขคี่เป็นตัวประกอบคือ 1 + 3 + 5 =8
สำหรับข้อความค้นหา 2:N =8 ตัวประกอบของ 8 คือ 1, 2, 4, 8
ผลรวมของเลขคี่เป็นตัวประกอบคือ 1 =1
แนวทางการแก้ปัญหา
เพื่อแก้ปัญหานี้ เราต้องรวมเลขคี่ของตัวเลขทั้งหมด จากนั้นเราจะคำนวณปัจจัยแล้วบวกเข้ากับผลลัพธ์ เพื่อให้ผลรวมของกระบวนการหลักแต่ละครั้งเราสามารถใช้ค่าที่คำนวณล่วงหน้าได้ ตัวอย่าง ผลรวมของเลข 41 สามารถหาได้จากผลรวมของเลขคี่ 4 + เลขคี่ 3
หลังจากสร้างอาร์เรย์ oddDigitSum เราจะพบตัวเลขทั้งหมดที่สามารถหารตัวเลขที่กำหนดได้ จากนั้น เราจะเพิ่มเลขคี่ทั้งหมดโดยใช้อาร์เรย์ theoddDigitSum
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <iostream> using namespace std; #define N 99999 void calcOddDigitSum(int oddDigitSum[]) { for (int i = 1; i < N; i++) oddDigitSum[i] = oddDigitSum[i / 10] + (i & 1) * (i % 10); } void findFactorSum(int oddDigitSum[], int factorSum[]) { for (int i = 1; i < N; i++) for (int j = i; j < N; j += i) factorSum[j] += oddDigitSum[i]; } int main(){ int Q = 3; int query[] = { 5, 154, 98 }; int oddDigitSum[N]; int factorSum[N]; calcOddDigitSum(oddDigitSum); findFactorSum(oddDigitSum, factorSum); for (int i = 0; i < Q; i++) cout<<"For query "<<(i+1)<<": The sum of odd number digit sums of all the factors of a number is "<<factorSum[query[i]]<<endl; return 0; }
ผลลัพธ์
For query 1: The sum of odd number digit sums of all the factors of a number is 6 For query 2: The sum of odd number digit sums of all the factors of a number is 31 For query 3: The sum of odd number digit sums of all the factors of a number is 27