要删除的数字位置,以使数字在C ++中被6整除
在这个问题中,我们得到了数字,我们必须从数字中删除更多数字。这样,删除后形成的新数字可被6整除。
让我们举个例子来更好地学习这个概念-
Input : 1324 Output : 4
解释-删除第四个数字,我们将得到132,该数字可被6整除。
在这里,我们得到一个数字,我们必须返回从该数字中删除该数字的位置,以使其能够被6整除。
为了解决此问题,我们将尝试创建解决该问题的逻辑。为此,我们将利用我们的知识,即如果一个数字可以被2和3整除,那么它可以被6整除。
从数字中删除数字后,将检查新形成的数字的除数6,即除数2和3。
方法
根据数字,我们可以发现通过删除数字创建的数字是否可以被6整除。如果我们看到数字的最后一位,就会出现两个条件。
当最后一位数字为奇数时
当最后一位数字为奇数时,唯一的方法是删除最后一位数字。仅当最后一位旁边的数字为偶数时,新数字才能被6整除。否则,无法解决。
当最后一位是偶数时
如果最后一位是偶数,那么当数字除以3时,我们必须找到余数。根据这个数字,我们可以检查可以删除的数字。
将数字除以3的三种情况-
余数为1-如果除数的余数为1,则可以从数组中删除任何数字1、4、7。如果可以删除多个数字,那么我们将以这样的方式删除该数字,即删除后形成的数字最大。
余数为2-如果除数的余数为2,则可以从数组中删除任何数字2、5、8。如果可以删除多个数字,则我们将以删除后形成的数字最大的方式删除该数字。
余数为3-如果除法的余数为1,则可以从数组中删除任何数字3、6、9。如果可以删除多个数字,则我们将以删除后形成的数字最大的方式删除该数字。
基于这些,让我们解决一些问题并找到所需的输出-
当最后一位数字为奇数时
1.34241341
在这种情况下,唯一可以删除的数字是从最后一个位置开始的数字,并且形成的数字将是3432134,该数字可以被6整除。因此,我们将返回被删除的1的位置,即8
2.3214241
在这种情况下,唯一可以删除的数字是从最后一个位置开始的1,并且形成的数字将是341224。该数字不能被6整除。因此,我们将返回-1。
当最后一位是偶数时
1.8097860
在这种情况下,我们需要将数字除以3,然后找到等于2的余数。因此,在2为余数的情况下,我们可以从数字中删除2、5、8。因此,可以从位置1和5删除8,以使数字可被2整除。我们将从第五位置删除8,因为如果从第一位置删除8,则会返回较小的数字。形成的新数字将为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