在 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 次瀏覽

開啟您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.