【问题标题】:Array1 consist of numbers divisible by 3. Make an array2 where the first elements are odd, then evenArray1 由可被 3 整除的数字组成。创建一个 array2,其中第一个元素是奇数,然后是偶数
【发布时间】:2020-11-16 18:36:43
【问题描述】:
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} 希望你现在明白了。

【问题讨论】:

  • tab1[i]%==0 对我来说是个谜。除其他原因外,因为我没有在代码中看到它。
  • 你的问题在哪里?您似乎试图在给定范围内生成一个充满随机数的数组,这些随机数也可以被 3 整除? (这似乎不是标题中描述的实际目标。)或者实际上对数组进行排序?请专注于您需要帮助的地方。
  • 问题未完全指定。是程序负责生成Array1吗? array2 的元素是否应该与 array1 相同,重新排序? “奇数然后偶数”是指所有奇数元素后跟所有偶数元素,还是意味着奇数和偶数之间交替?数组大小是作为问题的一部分指定的,还是您只是发明的?重要的是输出还是程序源中出现的数据结构?
  • 关于while循环:如果你想要一个能被3整除的随机数,选择一个随机数并乘以3。
  • 抱歉没有具体说明,这是我的第一个问题。我已经编辑了我的帖子。

标签: arrays c sorting


【解决方案1】:

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

        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]
}

【讨论】:

  • 理解这种方法的关键是偶数从后到前添加到tab2,赔率从前到后添加。这样您就不需要提前知道每个元素有多少,也不需要在第一次编写后移动任何元素。
猜你喜欢
  • 1970-01-01
  • 2012-06-17
  • 1970-01-01
  • 2022-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-13
  • 2021-08-24
相关资源
最近更新 更多