在 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

更新于:2020年1月3日

156 次浏览

开启您的职业生涯

通过完成课程获得认证

开始学习
广告