简体   繁体   English

C-一维数组组中的最大值

[英]C - maximum value from one dimensional array's groups

So, my task is to let user fill one dimensional array A. This array has M number of groups and P members in each group. 因此,我的任务是让用户填充一维数组A。此数组具有M个组,每个组中有P个成员。 I need to fill array B with maximum values of each group in A array and display results of maximum values in each group after. 我需要用A数组中每个组的最大值填充数组B,然后显示每个组中的最大值结果。 I couldn't figure out any way to do it. 我不知道有什么办法。 I would really appreciate your help since I am a beginner programmer and doing my best to study. 我非常感谢您的帮助,因为我是一名初学者,并且正在努力学习。 So my main problem in code is fillBArray function. 所以我在代码中的主要问题是fillBArray函数。

#include <stdio.h>
#include <stdlib.h>

int checkingvariable(int k, int a, int b);
void fillArray(int M, int P,int A[]);
void printArray(int M, int P,int A[]);
void fillBArray(int M, int P,int A[]);


int main()
{

int M, P;

    printf("Enter M (the number of groups): ");
    scanf("%d", &M);

    M=checkingvariable(M, 1, 10);

    printf("Enter P (the number of cars in one group): ");
    scanf("%d", &P);

    P=checkingvariable(P, 1, 10);
    int i = P*M;
    int A[i];
    fillArray(M, P, A);
    printArray(M, P, A);
    fillBArray(M, P, A);
    return 0;
}

void printArray(int M, int P,int A[])
    {
        int i;
        for (i=0 ; i< M*P ; i++)
        {
              printf("%d ", A[i]);
              printf("\n");
        }
    }

void fillArray(int M, int P, int A[])
    {

        int i;
        for (i=0 ; i< M*P ; i++)
        {
             printf("Enter speed of car %d: ", i+1);
             scanf("%d", &A[i]);
        }

    }

void fillBArray(int M, int P, int A[])
{
    int c, k=0;
    int maximum = A[0];
    int B[M], group;
    for (c = 0; c < P*M; c++)
    {
        if (A[c] > maximum)
        {
            maximum  = A[c];
        }
        maximum = B[k];
        printf("Maximum value for %d group is: %d", group, maximum);
    }
}

int checkingvariable(int k, int a, int b)
    {
        if (k<a || k>b)
            {
                while(k<a || k>b)
                    {
                        printf("Enter correct value between %d and %d: ", a, b);
                        scanf("%d", &k);
                    }
            }
            return k;
    }

One way is to replace one loop with two nested loops. 一种方法是用两个嵌套循环替换一个循环。 The outer loop would iterate groups, while the nested loop would iterate members in each group. 外循环将迭代组,而嵌套循环将迭代每个组中的成员。

One observation before you begin: members of a group g in the array A are located between indexes g*P , inclusive, and (g+1)*P , exclusive. 开始之前的一个观察:数组A中的组g成员位于索引g*P (包括)和(g+1)*P (不包括)之间。 Member m of a group is located at the index A[g*P + m] . 组的成员m位于索引A[g*P + m]

Now it should be clear how to make your loops: 现在应该清楚如何进行循环了:

for (int g = 0 ; g != M ; g++) { // Groups
    int max = A[g*P];
    for (int m = 1 ; m != P ; m++) { // Members
        ... // Compute max
    }
    // Store max for group g in B[]
}
#include <stdio.h>
#include <stdlib.h>

int checkingvariable(int k, int a, int b);
void fillArray(int M, int P,int A[]);
void printArray(int M, int P,int A[]);
void fillBArray(int M, int P,int A[]);


int main()
{

int M, P;

    printf("Enter M (the number of groups): ");
    scanf("%d", &M);

    M=checkingvariable(M, 1, 10);

    printf("Enter P (the number of cars in one group): ");
    scanf("%d", &P);

    P=checkingvariable(P, 1, 10);
    int i = P*M;
    int A[i];
    fillArray(M, P, A);
    printArray(M, P, A);
    fillBArray(M, P, A);
    return 0;
}

void printArray(int M, int P,int A[])
    {
        int i;
        for (i=0 ; i< M*P ; i++)
        {
              printf("%d ", A[i]);
              printf("\n");
        }
    }

void fillArray(int M, int P, int A[])
    {

        int i;
        for (i=0 ; i< M*P ; i++)
        {
             printf("Enter speed of car %d: ", i+1);
             scanf("%d", &A[i]);
        }

    }

/*void fillBArray(int M, int P, int A[])
{
    int c, k=0;
    int maximum = A[0];
    int B[M], group;
    for (c = 0; c < P; c++)
    {
        if (A[c] > maximum)
        {
            maximum  = A[c];
        }
        if (c < P)
        {
            group = 1;
            maximum = A[c];
            printf("Maximum value for %d group is: %d", group, maximum);
        }
        if (c < P*2)
        {
            group = 2;
            k=1;
            maximum = A[c];
            printf("Maximum value for %d group is: %d", group, maximum);
        }
    }
}*/

void fillBArray(int M, int P, int A[])
{
    int B[M], maximum = 0, m;
    for (int g = 0 ; g != M ; g++)// Groups
    {
        int max = A[g*P];
        for (m = 0 ; m != P ; m++) // Members
        {
            if (A[g*P + m] > maximum)
            {
                maximum = A[g*P + m];
            }
        }
    B[g] = maximum;
    printf("Maximum value for %d group is: %d", g+1, maximum);
    printf("\n");
    maximum = 0;
    }
}

int checkingvariable(int k, int a, int b)
    {
        if (k<a || k>b)
            {
                while(k<a || k>b)
                    {
                        printf("Enter correct value between %d and %d: ", a, b);
                        scanf("%d", &k);
                    }
            }
            return k;
    }

This is answer to my problem, check fillBArray. 这是我的问题的答案,请检查fillBArray。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM