在 C++ 中打印要移除的数字位置以使数字可被 6 整除
在这个问题中,我们给定一个数字,我们必须从数字中移除多个数字,以便移除后形成的新数字可以被 6 整除。
让我们举个例子来更好地理解这个概念:
Input : 1324 Output : 4
**说明**:移除第 4 个数字后,我们将得到 132,它可以被 6 整除。
在这里,我们给定一个数字,我们必须返回移除数字的位置,以使其可以被 6 整除。
为了解决这个问题,我们将尝试创建一个解决问题的逻辑。为此,我们将使用我们的知识:如果一个数字可以被 2 和 3 整除,那么它也可以被 6 整除。
从数字中移除数字后,将检查新形成的数字是否可以被 6 整除,即同时被 2 和 3 整除。
方法
根据数字,我们可以找到移除一个数字后产生的数字是否可以被 6 整除。如果我们查看数字的最后一位数字,就会出现两种情况。
最后一位数字是奇数时
当最后一位数字是奇数时,唯一可能的方法是移除最后一位数字。只有当最后一位数字之前的数字是偶数时,新数字才不能被 6 整除。否则,则无解。
最后一位数字是偶数时
如果最后一位数字是偶数,我们必须找到数字除以 3 的余数。并根据这个数字,我们可以检查可以移除哪个数字。
将数字除以 3 有三种情况:
**余数为 1**:如果除法的余数为 1,则可以从数组中移除任何数字 1、4、7。如果有多个数字可以移除,我们将移除数字的方式是使移除后形成的数字最大。
**余数为 2**:如果除法的余数为 2,则可以从数组中移除任何数字 2、5、8。如果有多个数字可以移除,我们将移除数字的方式是使移除后形成的数字最大。
**余数为 0**:如果除法的余数为 0,则可以从数组中移除任何数字 3、6、9。如果有多个数字可以移除,我们将移除数字的方式是使移除后形成的数字最大。
基于这些,让我们解决一些问题并找到所需的输出:
最后一位数字是奇数时
1. 34241341
在这种情况下,唯一可以移除的数字是从最后一位移除的 1,形成的数字将是 3432134,它可以被 6 整除。因此,我们将返回移除的 1 的位置,即 8。
2. 3214241
在这种情况下,唯一可以移除的数字是从最后一位移除的 1,形成的数字将是 341224,它不能被 6 整除。因此,我们将返回 -1。
最后一位数字是偶数时
1. 8097860
在这种情况下,我们需要将数字除以 3 并找到余数,余数等于 2。因此,如果余数为 2,我们可以从数字中移除 2、5、8。因此,可以移除第 1 位的 8 和 5 以使数字可被 2 整除。我们将从第 5 位移除 8,因为如果从第 1 位移除它,将返回一个较小的数字。形成的新数字将是 809760,它可以被 6 整除。因此,我们将返回 5。
示例
基于此逻辑,让我们创建一个程序来解决这个问题:
#include <bits/stdc++.h>
using namespace std;
void isDivisibleBy6(string num){
int n = num.length();
int a[n];
int sum = 0;
for (int i = 0; i < n; i++) {
a[i] = num[i] - '0';
sum += a[i];
}
if (a[n - 1] % 2){
if ( (a[n - 2] % 2 != 0) || (sum - a[n - 1]) % 3 != 0) {
cout << "-1" << endl;
}
else {
cout << n << endl;
}
}
else {
int re = sum % 3;
int del = -1;
int flag = 0;
for (int i = 0; i < n - 1; i++) {
if ((a[i]) % 3 == re) {
if (a[i + 1] > a[i]) {
del = i;
flag = 1;
break;
}
else {
del = i;
}
}
}
if (flag == 0) {
if (a[n - 2] % 2 == 0 and re == a[n - 1] % 3)
del = n - 1;
}
if (del == -1)
cout << -1 << endl;
else {
cout << del + 1 << endl;
}
}
}
int main(){
string number = "343224152";
isDivisibleBy6(number);
return 0;
}输出
5
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP