要删除的数字位置,以使数字在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