【问题标题】:Function to count how many numbers in an array meet a certain condition计算数组中有多少个数满足特定条件的函数
【发布时间】:2020-10-23 02:49:12
【问题描述】:

我想创建一个函数来计算数组包含多少“显性”数字。占主导地位的意思是一个数字比它自己右边的任何东西都大。我创建了 main 来测试它是否有效,但程序只是崩溃了。有什么建议吗?

    #include <stdio.h>
    #include <stdlib.h>
    #define NR 4
    #define NC 8
    int dominants(int arr[NR][NC]);
    int main(int argc,const char *argv[]){
          int n;
          int array[NR][NC]={{5,9,2,4,1,7,2,4}
                            ,{3,5,6,2,5,6,1,2}
                            ,{1,3,4,7,8,8,3,0}
                            ,{1,3,5,6,7,8,2,1}};

          n=dominants(array);
          printf("there are %d dominants", n);
          return 0;
    }
    int dominants(int arr[NR][NC]){
        int i, j, k, l;
        int flag, num;
        num=0;
        flag=0;
        for(i=0;i<NC;i++){
            for(j=0;j<NR;j++){
                for(k=i+1;j<NC;k++){
                    for(l=k+1;l<NR;l++){
                        if(arr[j][i]<=arr[l][k]){
                            flag=1;
                        }
                    }

                }
            }
            if(flag==1)
                num++;
        }


    return num;
    }

【问题讨论】:

  • 是:使用调试器确定崩溃的位置并从那里跟踪/打印变量。
  • 是的,在k=i+1;j&lt;NC;k++ 中,将j 更改为k
  • 您显然还应该在某个时候将flag 重置回0(可能在增加num 之后立即)。
  • 最后,除了最外层的for循环之外,你还不如在循环条件中添加&amp;&amp; flag == 0
  • 谢谢@goodvibration,但我不明白为什么 && 标志==0,是出于效率原因还是有其他原因?

标签: c function for-loop multidimensional-array


【解决方案1】:

将第 24 行更改为条件有 j

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-19
    • 2013-10-14
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多