在 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