You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单循环实现向量A偶数存B头部奇数存B尾部的do while条件问题

需求说明
  • 对向量进行排序,优先展示偶数,再展示奇数
  • 具体规则:将向量A的偶数从向量B的起始位置插入,奇数从向量B的末尾位置插入
  • 实现限制:仅可使用单个循环结构完成上述插入逻辑
原有代码问题

现有代码中第二个do while循环的赋值逻辑存在错误:直接使用遍历A的下标i作为B的赋值索引,会导致B数组中间位置出现赋值冲突、数据错乱,无法实现偶数连续排在前、奇数连续排在后的需求。
你询问的do while循环条件无需修改,保持i < 25即可,问题出在循环内部的赋值逻辑,需要新增两个指针分别标记B数组的偶数插入位置和奇数插入位置。

修正后完整代码
#include <stdio.h>
#include <time.h>
#include <stdlib.h>

int main()
{
    int i, j, A[25], B[25], testeNumeroIgual = 0, aux;
    // 新增双指针,left标记偶数插入位置,right标记奇数插入位置
    int left = 0, right = 24;
    srand(time(NULL));
    
    i = 0;
    
   do {
        A[i] = rand() % 40;
        testeNumeroIgual = 0;
        
        for (j = 0; j < i; j++) {
            if (A[j] == A[i]) {
                testeNumeroIgual = 1;
            }
        }
        
        if (testeNumeroIgual == 0)
            i++;
   } while(i < 25);
   

   i = 0;
   // 依然是单个do while循环,满足实现限制
   do {
        if (A[i] % 2 == 0) {
            // 偶数从B数组左侧插入,插入后左指针右移
            B[left++] = A[i];    
        }
        else {
            // 奇数从B数组右侧插入,插入后右指针左移
            B[right--] = A[i];
        }   
        
        i++;
   } while(i < 25); 
   
   for (i = 0; i < 25; i++) {
        printf("%d\n", B[i]);
    }
    return 0;
}
实现说明
  • 新增的left指针初始值为0,对应B数组的起始位置,每插入一个偶数就自增1,指向下一个偶数的插入位
  • 新增的right指针初始值为24,对应长度为25的B数组的末尾位置,每插入一个奇数就自减1,指向下一个奇数的插入位
  • 整个处理A元素插入B的逻辑依然使用单个do while循环实现,符合要求
  • do while的循环条件保持i < 25即可,作用是遍历完A数组的全部25个元素

内容的提问来源于stack exchange,提问作者Patrick Masceno Farias

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 08:27:04