在 C++ 中可被 2、3 和 5 整除的具有给定 N 位数字集的最大数
在本教程中,我们将编写一个程序,找出可被2、3和5整除的数组构成的最大数。
让我们看看解决问题的步骤。
初始化数组。
数字必须以0结尾,并且所有数字的总和应能被3整除才能被2、3和5整除。
检查数组中的0,如果数组中不存在,则无法打印。
按降序对数组进行排序。
求总和%3的余数。
如果余数不是1,则删除末尾的所有数字,其中数字%3的余数等于上述余数。
如果没有与上述相同余数的数字,则将上述余数减去3,并删除与上述余数相同的最后两位数字。
打印数组中的所有数字。
示例
让我们看看代码。
#include输出结果using namespace std; void findLargestDivibleNumber(int n, vector & v){ int flag = 0; long long sum = 0; for (int i = 0; i < n; i++) { if (v[i] == 0) { flag = 1; } sum += v[i]; } if (!flag) { cout << "Not possible" << endl; }else { sort(v.begin(), v.end(), greater ()); if (v[0] == 0) { cout << "0" << endl; }else { int flag = 0; int remainder = sum % 3; if (remainder != 0) { for (int i = n - 1; i >= 0; i--) { if (v[i] % 3 == remainder) { v.erase(v.begin() + i); flag = 1; break; } } if (flag == 0) { remainder = 3 - remainder; int count = 0; for (int i = n - 1; i >= 0; i--) { if (v[i] % 3 == remainder) { v.erase(v.begin() + i); count++; if (count >= 2) { break; } } } } } if (*v.begin() == 0) { cout << "0" << endl; }else { for (int i : v) { cout << i; } } } } } int main() { int n = 9; vector v{ 4, 5, 0, 3, 2, 4, 5, 6, 7 }; findLargestDivibleNumber(n, v); return 0; }
如果你运行上面的代码,那么你会得到下面的结果。
765544320
结论
如果您对本教程有任何疑问,请在评论部分提及。