当前位置: 首页 > 编程笔记 >

计算C ++中的元音排列

诸正谊
2023-03-14
本文向大家介绍计算C ++中的元音排列,包括了计算C ++中的元音排列的使用技巧和注意事项,需要的朋友参考一下

假设我们有一个数字n,我们必须计算使用这些规则可以形成多少个长度为n的字符串-每个字符都是小写的元音每个元音'a'只能跟一个'e'。每个元音“ e”只能跟一个“ a”或“ i”。每个元音“ i”都不能跟在另一个“ i”之后。每个元音“ o”只能跟一个“ i”或“ u”。每个元音“ u”只能跟一个“ a”。答案可能太大,因此我们将以10 ^ 9 + 7取模。

因此,如果输入像2,那么输出将是10,这是因为所有可能的字符串都是“ ae”,“ ea”,“ ei”,“ ia”,“ ie”,“ io”,“ iu” ,“ oi”,“ ou”,“ ua”。

为了解决这个问题,我们将遵循以下步骤-

  • m = 1 ^ 9 + 7

  • 定义一个函数add(),这将需要a,b,

  • return((a mod m)+(b mod m))mod m

  • 定义一个函数mul(),这将需要a,b,

  • return((a mod m)*(b mod m))mod m

  • 定义一个函数solve(),将花费n,

  • 定义一个大小为5 x 5的数组A:= {{0,1,0,0,0},{1,0,1,0,0},{1,1,0,1,1},{ 0,0,1,0,1},{1,0,0,0,0}}

  • 定义大小为5 x 5的数组结果。

  • 对于初始化i:= 0,当i <5时,更新(将i增加1),请执行-

    • 如果i与j相同,则result [i,j]:= 1

    • 否则,结果[i,j]:= 0

    • 对于初始化j:= 0,当j <5时,更新(将j增加1),执行-

    • (将n减1)

    • 对于初始化i:= 1,当i <= n时,更新(将i增加1),-

      • 结果=结果* A

    • 和:= 0

    • 对于初始化i:= 0,当i <5时,更新(将i增加1),请执行-

      • 总和:=加(结果[i,j],总和)

      • 对于初始化j:= 0,当j <5时,更新(将j增加1),执行-

    • 返还金额

    让我们看下面的实现以更好地理解-

    示例

    #include <bits/stdc++++.h>
    using namespace std;
    typedef long long int lli;
    const lli m = 1e9+7;
    lli add(lli a, lli b){
       return ((a%m) + (b%m))%m;
    }
    lli mul(lli a, lli b){
       return ((a%m) * (b%m))%m;
    }
    class Solution {
       public:
       void multiply(lli A[5][5], lli B[5][5]){
          lli C[5][5];
          for(lli i =0;i<5;i++){
             for(lli j=0;j<5;j++){
                lli temp =0;
                for(lli k =0;k<5;k++){
                   temp = add(temp,mul(A[i][k],B[k][j]));
                }
                C[i][j] = temp;
             }
          }
          for(lli i =0;i<5;i++){
             for(lli j =0;j<5;j++){
                A[i][j] = C[i][j];
             }
          }
       }
       lli solve(lli n){
          lli A[5][5] = { { 0, 1, 0, 0, 0 }, { 1, 0, 1, 0, 0 }, { 1, 1,
          0, 1, 1 }, { 0, 0, 1, 0, 1 }, { 1, 0, 0, 0, 0 } };
          lli result[5][5];
          for (lli i = 0; i < 5; i++) {
             for (lli j = 0; j < 5; j++) {
                if (i == j)
                   result[i][j] = 1;
                else
                   result[i][j] = 0;
             }
          }
          n--;
          for (int i = 1; i <= n; i++)
          multiply(result, A);
          lli sum = 0;
          for (lli i = 0; i < 5; i++) {
             for (lli j = 0; j < 5; j++) {
                sum = add(result[i][j], sum);
             }
          }
          return sum;
       }
       int countVowelPermutation(int n) {
          return solve(n);
       }
    };
    main(){
       Solution ob;
       cout << (ob.countVowelPermutation(2));
    }

    输入值

    2

    输出结果

    10
     类似资料:
    • 我需要找到一个单词中元音的计数。然而,当我比较单词中的字母是否是元音时, 举个例子,我做的就像下面这个, ……)//其余部分被省略 语句变得太长。有没有办法将它们与正则表达式或类似正则表达式的比较进行比较,并给我字符串中元音出现的次数?

    • 实现 (Implementation) 现在,我们将看到该计划的实际执行情况 - #include <stdio.h> int main() { char s[] = "TajMahal"; // String Given int i = 0; int vowels = 0; // Vowels counter int consonants =

    • 问题内容: 我有一维列表如下: 我要列出以下元组,并分别计算每个元组的平均值。 预期结果应为: 这样做更简单的方法是什么? 问题答案: 将数据放入形状为(2,2,2,2)的4-d numpy数组中,然后取轴1和3上该数组的平均值: 如果需要最终结果作为一维数组,则可以使用该方法: 请参阅如何对numpy数组的2x2子数组的平均值进行矢量化处理?对于类似的问题。

    • 给定一个句子,我希望能够数出每个单词中有多少个元音。 示例输入: 示例输出: 我最初的想法是有2个同时循环。第一个循环直到满足EOF以结束程序,第二个(嵌套的)同时循环将运行直到满足空格 (" ") ,同时还对当前单词中的元音求和。一旦遇到空格,它将打印出元音的当前值,第二个同时循环将结束并重新开始(元音计数器重置回0)。 这是我为此编写的代码: 然而,这导致语法错误,我不能找出我的错误。 第6行

    • 考虑以下代码来计算每个单词中字母“a”的出现次数: 这将导致这样的事情: 我试图做更多的事情: 计算每个单词中的元音总数 合计编号每个单词中的字母数 一个单词是否以元音开头,则 1 否则 0 单词是否以元音结尾,则 1 否则 0 问题是,如果我使用nchar(data$string),它也计算点'.'此外,我无法找到以上4个要求的帮助。 最终数据我想看起来像这样:

    • 我一直在试图弄清楚如何计算句子每个单词中的元音和字符。例如 在句子 < code>hello : 5个字符,2个元音 <代码>有:5个字符,2个元音 。我见过完整句子做同样事情的代码。但不是一个字一个字地。 下面是我一直在做的编码 输入将全部。我很难弄清楚这一点。 在运行代码时,我没有得到元音计数。我能把句子分开。但元音计数没有发生。