个人笔记分享:可以通过改变最多一位数字而得到的能被3除以的不同数字的数量

480 阅读2分钟

最多改变一个数字就能得到的能被3整除的不同数字的数目

  • 最后更新 : 2021年8月5日

给定一个字符串 **str[]数字N,**任务是计算通过改变数字的最多一位数使给定的数字能被3整除的方法数量。

例子。

**输入:**str[] = "23"
**输出。**7
解释。 以下是可以由字符串组成的能被3整除的数字 - 03, 21, 24, 27, 33, 63, 93
1.将2改为0 (0+3)=3能被3整除
2.将3改为1 (2+1)=3能被3整除
3将3改为4 (2+4)=6能被3整除
4将2改为3的和是6能被3整除
同样,共有7种方法可以使给定的数字被3整除

**输入:**str[] = "235"
输出。 9

办法。解 决这个问题的思路非常简单。计算一个给定数字的位数之和,然后对于每个索引,去掉该位数,并尝试从09的所有可能的位数,看总和是否能被3整除。按照下面的步骤来解决这个问题。

  • 将变量sum初始化为0,以存储数字的位数之和。
  • 使用变量i一个范围 **[0, N]**进行迭代,并执行以下步骤。
    • 在变量sum中加入第i个索引的数字的值**。**
  • 将变量count初始化为0,以存储答案。
  • 使用变量i在范围**[0, N]**进行迭代,并执行以下步骤。
    • 初始化变量restaining_sumsum-(number.charAt(i)-48)。
    • 使用变量j在一个范围 **[0, 9]**上进行迭代,并执行以下步骤。
      • j的值加入到变量restaining_sum中,如果restaining_sum能被3整除,且j不等于第i个索引的数字,则将count的值加1。
  • 执行上述步骤后,打印出count的值作为答案。

下面是上述方法的实现。

爪哇

// Java program fo the above approach
import java.io.*;
import java.util.*;
class GFG {
// Function to count the number of
// possible numbers divisible by 3
public static void findCount(String number)
{
// Calculate the sum
int sum =0;
for (int i =0; i < number.length(); ++i) {
sum += number.charAt(i) -48;
}
// Store the answer
int count =0;
// Iterate over the range
for (int i =0; i < number.length(); ++i) {
// Decreasing the sum
int remaining_sum
= sum - (number.charAt(i) -48);
// Iterate over the range
for (int j =0; j <=9; ++j) {
// Checking if the new sum
// is divisible by 3 or not
if ((remaining_sum + j) %3 ==0
&& j != number.charAt(i) -48) {
// If yes increament
// the value of the count
++count;
}
}
}
System.out.println(count);
}
// Driver Code
public static void main(String[] args)
{
// Given number
String number ="235";
findCount(number);
}
}

输出

9

**时间复杂度。**O(N)
辅助空间。O(1)

读者请注意!现在不要停止学习。掌握竞争性编程的所有重要数学概念。 CP课程的基本数学以适合学生的价格获得所有重要的数学概念。要完成从学习语言到DS Algo和更多的准备工作,请参考 完整的面试准备课程.

我的个人笔记 箭头_下降_上升

保存