【问题标题】:Can I replace my Nested if loop with something more efficient?我可以用更有效的方法替换我的嵌套 if 循环吗?
【发布时间】:2022-01-11 01:43:06
【问题描述】:

我尝试通过使用 for 循环和 if else 语句来计算有多少个 1、2、3、4 和 5。我的问题是:有没有更有效的写法?

int A[15] = {1,5,4,1,3,1,3,4,5,2,3,2,5,3,2};
int B[5] = {};

for (int i = 0; i <= 14; i++)
{
    if (A[i] == 1)
    {
        B[0]++;
    }
    else if (A[i] == 2)
    {
        B[1]++;
    }
    else if (A[i] == 3)
    {
        B[2]++;
    }
    else if (A[i] == 4)
    {
        B[3]++;
    }
    else if (A[i] == 5)
    {
        B[4]++;
    }
}

【问题讨论】:

    标签: arrays c loops nested


    【解决方案1】:
    int[] a = {1, 5, 4,...};
    int[] b = new int[5];
    for (int n: a) {
        assert 1 <= n && n <= 5;
        b[n - 1]++;
    }
    

    n 将被设置为a 的每个元素。

    数组元素初始化为0、0.0、false、null,即类型的默认值。

    您在与 C/C++ 兼容的语法中使用了方括号。通常使用上述更合乎逻辑的符号:类型的一部分。

    变量名和函数名按约定以小写字母开头,并以驼峰命名。

    int[] studentScores =
    

    断言很少见:我的良心不好,假设没有值超出范围。

    【讨论】:

      【解决方案2】:

      前提是数组A的元素大于0

      #include <stdio.h>
      
      int main()
      {
          int A[15] = { 1, 5, 4, 1, 3, 1, 3, 4, 5, 2, 3, 2, 5, 3, 2 };
          int B[5] = { 0, 0, 0, 0, 0 };
          
          for (int i = 0 ; i < sizeof(A)/sizeof(A[0]) ; i++)
               ++B[A[i] - 1];
          
          for (int i = 0 ; i < sizeof(B)/sizeof(B[0]) ; i++)
              printf("%d ", B[i]);
              
          return 0;
      }
      

      此代码产生以下输出:

      3 3 4 2 3
      

      【讨论】:

        猜你喜欢
        • 2021-08-20
        • 2020-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-31
        • 1970-01-01
        相关资源
        最近更新 更多