如何从一个数组中生成两个偶数和奇数的数组?

时间:2014-07-11 03:39:02

标签: c arrays

我试图创建一个程序,将一些数字作为输入,然后将偶数和奇数放在两个单独的数组中,并以数组的形式显示它们。我需要帮助我如何通过跳过奇数组中的偶数来更好地使这个程序更好(因为我把0改为)。

我的代码是:

#include <stdio.h>
int main()
{
    int n, i; // n is the size of array and i is for loop
    printf("Enter the size of array here:");
    scanf("%d" ,&n);

    int num[n], even[n], odd[n]; // num will hold all numbers, even will hold even numbers and odd will hold odd numbers

    printf("\nPlease enter integers only!!!");

    for(i=0;i<n;i++)
    {
        printf("\nEnter the number %d here:", i+1); //filling array
        scanf("%d" ,&num[i]);
    }

    for(i=0;i<n;i++) // filling even and odd arrays
    {
        if((num[i]%2) == 0)
            even[i] = num[i];
        else
            even[i] = 0;
    }
    for(i=0;i<n;i++) // filling even and odd arrays
    {
        if((num[i]%2) != 0)
            odd[i] = num[i];
        else
            odd[i]= 0;
    }
    printf("\nEVEN\t\tODD\n");

    for(i=0;i<n;i++)
        printf("%d\t\t%d\n" , even[i], odd[i]);

    system("pause");
    return 0;
}

5 个答案:

答案 0 :(得分:2)

#include<stdio.h>
int main()
{
   int n, i, even_index=0, odd_index=0; // n is the size of array and i is for loop
   printf("Enter the size of array here:");
   scanf("%d" ,&n);

   int num[n], even[n], odd[n]; // num will hold all numbers, even will hold even numbers and odd will hold odd numbers

   printf("\nPlease enter integers only!!!");

   for(i=0;i<n;i++)
   {
       printf("\nEnter the number %d here:", i+1); //filling array
       scanf("%d" ,&num[i]);
   }

   for(i=0;i<n;i++) // filling even and odd arrays
   {
       if((num[i]%2) == 0)
       {
        even[even_index++] = num[i];
       }
       else
       {
        odd[odd_index++] = num[i];
       }
   }

   printf("\nEVEN\n");

   for(i=0;i<even_index;i++)
       printf("%d\n" , even[i]);

   printf("ODD\n");
   for(i=0;i<odd_index;i++)
       printf("%d\n" , odd[i]);

   system("pause");
   return 0;
}

对偶数和奇数数组只有两个独立的索引。无论何时向数组输入一个元素,都会增加相应的计数器。

答案 1 :(得分:0)

首先,从0开始有偶数和奇数数组的两个索引变量。然后,当你遍历大数组时,当你找到偶数或奇数时,将它放在数组的相应索引变量位置。然后你递增它。通过这种方式,您可以确切地知道将偶数和奇数变量保存在各自数组中的位置。

答案 2 :(得分:0)

你不需要在这里使用两个for循环,你可以在for循环的else块中分配奇数值: 将代码修改为:

   int conter1 = 0;
   int counter2 = 0;
    for(i=0;i<n;i++) // filling even and odd arrays
    {
        if((num[i]%2)  == 0)

            even[counter1] = num[i];
             counter1++;
        else{
            odd[counter2] = num[i];
            counter2++;
        }
    }

for(i=0;i<counter1;i++)
    printf("%d\t\n" , even[i];

 for(i=0;i<counter2;i++)
    printf("%d\t\n" , odd[i]);

答案 3 :(得分:0)

最简单的方法是保留两个额外的计数:一个用于偶数,一个用于奇数。

例如,这是一个对代码进行最小更改的实现:

#include <stdio.h>

int main() {
    int n, i; 
    printf("Enter the size of array here: ");
    scanf("%d" ,&n);

    int num[n];
    int even[n];
    int odd[n];

    int evenCount = 0;
    int oddCount = 0;

    for(i=0;i<n;i++) {
        printf("Enter the number %d here: ", i+1);
        scanf("%d" ,&num[i]);
    }

    for(i=0;i<n;i++)
        if((num[i]%2) == 0)
            even[evenCount++] = num[i];

    for(i=0;i<n;i++)
        if((num[i]%2) != 0)
            odd[oddCount++] = num[i];

    for(i=0;i<evenCount;i++)
        printf("Even: %d\n", even[i]);

    for(i=0;i<oddCount;i++)
        printf("Odd: %d\n", odd[i]);
}

输出

Enter the size of array here: 4
Enter the number 1 here: 1
Enter the number 2 here: 2
Enter the number 3 here: 3
Enter the number 4 here: 4
Even: 2
Even: 4
Odd: 1
Odd: 3

答案 4 :(得分:0)

您应该使用2个索引,每个数组一个。你可以这样改变循环(假设你的问题只是填充数组):

i = 0, j = 0, k = 0;
for(i=0;i<n;i++){
    if((num[i]%2) == 0){
        even[j] = num[i];
        j++;
    }
    else{
        odd[k] = num[i];
        k++;
    }
}