给定N个非负整数的数组arr [] ,任务是根据它们的数字乘积对这些整数进行排序。
例子:
Input: arr[] = {12, 10, 102, 31, 15}
Output: 10 102 12 31 15
10 -> 1 * 0 = 0
102 -> 1 * 0 * 2 = 0
12 -> 1 * 2 = 2
31 -> 3 * 1 = 3
15 -> 1 * 5 = 5
Input: arr[] = {12, 10}
Output: 10 12
方法:这个想法是将每个元素及其数位乘积存储在向量对中,然后根据存储的数字积对向量的所有元素进行排序。最后,按顺序打印元素。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function to return the product
// of the digits of n
int productOfDigit(int n)
{
int product = 1;
while (n > 0) {
product *= n % 10;
n = n / 10;
}
return product;
}
// Function to sort the array according to
// the product of the digits of elements
void sortArr(int arr[], int n)
{
// Vector to store the digit product
// with respective elements
vector > vp;
// Inserting digit product with elements
// in the vector pair
for (int i = 0; i < n; i++) {
vp.push_back(make_pair(productOfDigit(arr[i]), arr[i]));
}
// Sort the vector, this will sort the pair
// according to the product of the digits
sort(vp.begin(), vp.end());
// Print the sorted vector content
for (int i = 0; i < vp.size(); i++)
cout << vp[i].second << " ";
}
// Driver code
int main()
{
int arr[] = { 12, 10, 102, 31, 15 };
int n = sizeof(arr) / sizeof(arr[0]);
sortArr(arr, n);
return 0;
}
Python3
# Python3 implementation of the approach
# Function to return the product
# of the digits of n
def productOfDigit(n) :
product = 1;
while (n > 0) :
product *= (n % 10);
n = n // 10;
return product;
# Function to sort the array according to
# the product of the digits of elements
def sortArr(arr, n) :
# Vector to store the digit product
# with respective elements
vp = [];
# Inserting digit product with elements
# in the vector pair
for i in range(n) :
vp.append((productOfDigit(arr[i]), arr[i]));
# Sort the vector, this will sort the pair
# according to the product of the digits
vp.sort();
# Print the sorted vector content
for i in range(len(vp)) :
print(vp[i][1], end = " ");
# Driver code
if __name__ == "__main__" :
arr = [ 12, 10, 102, 31, 15 ];
n = len(arr);
sortArr(arr, n);
# This code is contributed by AnkitRai01
输出:
10 102 12 31 15
时间复杂度: O(nlogn)