首页 > 解决方案 > Array1 由可被 3 整除的数字组成。创建一个 array2,其中第一个元素是奇数,然后是偶数

问题描述

int main() {
    int tab1[20], tab2[20], a, b, i, x;
    scanf("%d %d", &a, &b);
    srand(time(NULL));
    for(i=0;i<20;i++){
        x=rand()%(b+1-a)+a;
        while(x%3!=0){
            x=rand()%(b+1-a)+a;
        }
        tab1[i]=x;
        if(tab1[i]%2!=0){
            tab2[i]=tab1[i];
        }
    }
    for(i=0;i<20;i++){
        printf("%d ", tab1[i]);
    }
    printf("\n");
    for(i=0;i<20;i++){
        printf("%d ", tab2[i]);
    }
    return 0;
}

完整的任务是:创建一个由 20 个元素组成的数组,这些元素由在给定范围 (a,b) 内可被 3 整除的随机数构成。制作第二个数组,因为第一个元素是奇数,然后是偶数。抱歉,如果这几乎没有意义,我是从波兰语翻译过来的。

这就是我想出的,它不起作用,因为如果tab1[i]%2==0那样它会产生垃圾。如果不使用复杂的排序功能,我不知道如何解决它。我们有 15 分钟的时间来做这件事,如果可能的话,只用一个 for 循环。

给定 array1[3]: {3,6,6,3} 然后 array2 应该是这样的: {3,3,6,6} 希望你现在明白了。

标签: arrayscsorting

解决方案


我只是改变这部分和初始化变量,你不需要这么多。

        if(tab1[i]%2!=0){
            tab2[i]=tab1[i];
        }

所以除此之外,你想要一个变量,它告诉你你已经得到了多少奇数。让我们称之为oddsCount。每次你有奇数时,你都会增加它。

同样在第 i 步中,您将获得i-oddsCount偶数。

所以让我们把它放到代码中

if(tab1[i]%2!=0){
   tab2[oddsCount]=tab1[i];
   ++oddsCount;
} else {
// 19 is last index of the array size
   tab2[19-(i-oddsCount)] = tab1[i]
}

推荐阅读