给定一个大小为N的数组arr[] ,任务是从一个数组中打印所有完全数,该数组的数字总和也是一个完全数。
例子:
Input: arr[] = { 3, 8, 12, 28, 6 }
Output: 6
Explanation: The array element arr[4] (= 6) is a perfect number. The array element arr[3] (= 28) is a perfect number but its sum of digits (= 10) is not a perfect number.
Input: arr[] = { 1, 2, 3 }
Output: 1
处理方法:按照以下步骤解决问题:
- 声明一个函数isPerfect()来检查数字是否是完美数字。
- 声明另一个函数sumOfDigits()来计算一个数字的所有数字的总和。
- 遍历数组arr[] :
- 如果arr[i]是一个完美数:
- 初始化一个变量,比如digitSum,以存储当前数组元素的数字总和。
- 如果digitSum也是一个完全数,则打印该数字。
- 如果arr[i]是一个完美数:
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Function to check if a number
// is perfect number or not
int isPerfect(int N)
{
// Stores sum of proper divisors
int sumOfDivisors = 1;
for (int i = 2; i <= N / 2; ++i) {
if (N % i == 0) {
sumOfDivisors += i;
}
}
// If sum of digits is equal to N,
// then it's a perfect number
if (sumOfDivisors == N) {
return 1;
}
// Otherwise, not a perfect number
else
return 0;
}
// Function to find the
// sum of digits of a number
int sumOfDigits(int N)
{
// Stores sum of digits
int sum = 0;
while (N != 0) {
sum += (N % 10);
N = N / 10;
}
// Return sum of digits
return sum;
}
// Function to count perfect numners from
// an array whose sum of digits is also perfect
void countPerfectNumbers(int arr[], int N)
{
// Traverse the array
for (int i = 0; i < N; ++i) {
// If number is perfect
if (isPerfect(arr[i])) {
// Stores sum of digits
// of the number
int sum = sumOfDigits(arr[i]);
// If that is also perfect number
if (isPerfect(sum)) {
// Print that number
cout << arr[i] << " ";
}
}
}
}
// Driver Code
int main()
{
// Given array
int arr[] = { 3, 8, 12, 28, 6 };
// Size of the array
int N = sizeof(arr) / sizeof(arr[0]);
// Function call to count perfect numbers
// having sum of digits also perfect
countPerfectNumbers(arr, N);
return 0;
}
Java
// Java Program to implement
// the above approach
import java.io.*;
import java.util.*;
class GFG {
// Function to check if a number
// is perfect number or not
static boolean isPerfect(int N)
{
// Stores sum of proper divisors
int sumOfDivisors = 1;
for (int i = 2; i <= N / 2; ++i) {
if (N % i == 0) {
sumOfDivisors += i;
}
}
// If sum of digits is equal to N,
// then it's a perfect number
if (sumOfDivisors == N) {
return true;
}
// Otherwise, not a perfect number
else
return false;
}
// Function to find the
// sum of digits of a number
static int sumOfDigits(int N)
{
// Stores sum of digits
int sum = 0;
while (N != 0) {
sum += (N % 10);
N = N / 10;
}
// Return sum of digits
return sum;
}
// Function to count perfect numners from
// an array whose sum of digits is also perfect
static void countPerfectNumbers(int arr[], int N)
{
// Traverse the array
for (int i = 0; i < N; ++i) {
// If number is perfect
if (isPerfect(arr[i])) {
// Stores sum of digits
// of the number
int sum = sumOfDigits(arr[i]);
// If that is also perfect number
if (isPerfect(sum)) {
// Print that number
System.out.print(arr[i] + " ");
}
}
}
}
// Driver Code
public static void main(String[] args)
{
// Given array
int arr[] = { 3, 8, 12, 28, 6 };
// Size of the array
int N = arr.length;
// Function call to count perfect numbers
// having sum of digits also perfect
countPerfectNumbers(arr, N);
}
}
// This code is contributed by Kingash.
Python3
# Python Program to implement
# the above approach
# Function to check if a number
# is perfect number or not
def isPerfect(N):
# Stores sum of proper divisors
sumOfDivisors = 1;
for i in range(2, int(N / 2) + 1):
if (N % i == 0):
sumOfDivisors += i;
# If sum of digits is equal to N,
# then it's a perfect number
if (sumOfDivisors == N):
return True;
# Otherwise, not a perfect number
else:
return False;
# Function to find the
# sum of digits of a number
def sumOfDigits(N):
# Stores sum of digits
sum = 0;
while (N != 0):
sum += (N % 10);
N = N // 10;
# Return sum of digits
return sum;
# Function to count perfect numners from
# an array whose sum of digits is also perfect
def countPerfectNumbers(arr, N):
# Traverse the array
for i in range(N):
# If number is perfect
if (isPerfect(arr[i])):
# Stores sum of digits
# of the number
sum = sumOfDigits(arr[i]);
# If that is also perfect number
if (isPerfect(sum)):
# Prthat number
print(arr[i], end=" ");
# Driver Code
if __name__ == '__main__':
# Given array
arr = [3, 8, 12, 28, 6];
# Size of the array
N = len(arr);
# Function call to count perfect numbers
# having sum of digits also perfect
countPerfectNumbers(arr, N);
# This code is contributed by 29AjayKumar
C#
// C# program for the above approach
using System;
class GFG
{
// Function to check if a number
// is perfect number or not
static bool isPerfect(int N)
{
// Stores sum of proper divisors
int sumOfDivisors = 1;
for (int i = 2; i <= N / 2; ++i) {
if (N % i == 0) {
sumOfDivisors += i;
}
}
// If sum of digits is equal to N,
// then it's a perfect number
if (sumOfDivisors == N) {
return true;
}
// Otherwise, not a perfect number
else
return false;
}
// Function to find the
// sum of digits of a number
static int sumOfDigits(int N)
{
// Stores sum of digits
int sum = 0;
while (N != 0) {
sum += (N % 10);
N = N / 10;
}
// Return sum of digits
return sum;
}
// Function to count perfect numners from
// an array whose sum of digits is also perfect
static void countPerfectNumbers(int []arr, int N)
{
// Traverse the array
for (int i = 0; i < N; ++i) {
// If number is perfect
if (isPerfect(arr[i])) {
// Stores sum of digits
// of the number
int sum = sumOfDigits(arr[i]);
// If that is also perfect number
if (isPerfect(sum)) {
// Print that number
Console.Write(arr[i] + " ");
}
}
}
}
// Driver Code
static public void Main()
{
// Given array
int []arr = { 3, 8, 12, 28, 6 };
// Size of the array
int N = arr.Length;
// Function call to count perfect numbers
// having sum of digits also perfect
countPerfectNumbers(arr, N);
}
}
// This code is contributed by jana_sayantan.
Javascript
输出:
6
时间复杂度: O(N 3 * log N)
辅助空间: O(1)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live