yangzhixiaohuli 发表于 2024-10-26 23:11:35

数组元素移动

【问题描述】
将整数数组A,将其分为两部分,左边所有元素为奇数,右边所有元素为偶数。数组元素个数不超过1000。
【输入形式】
以逗号隔开的所有元素
【输出形式】
依次打印调整后的数组元素,元素间以逗号隔开。奇数序列和偶数序列分别按原序列中的顺序依次输出
【样例输入】

1,2,33,8,5
【样例输出】

1,33,5,2,8

这题用C或者C++怎么做

FishC 发表于 2024-10-26 23:11:46

好的,让我们用C语言来解决这个问题。我们将输入一个以逗号隔开的整数数组,然后将其分离为奇数和偶数两部分,最后按照指定顺序输出。

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

void splitAndPrintArray(char *input) {
    int arr;
    int odd, even;
    int oddCount = 0, evenCount = 0;
    int arrIndex = 0;

    // 使用strtok分割字符串,并将其转化为整数放入数组arr中
    char *token = strtok(input, ",");
    while (token != NULL) {
      arr = atoi(token);
      token = strtok(NULL, ",");
    }

    // 将数组中的奇数和偶数分开存到不同的数组中
    for (int i = 0; i < arrIndex; i++) {
      if (arr % 2 == 0) {
            even = arr;
      } else {
            odd = arr;
      }
    }

    // 按要求的格式输出结果
    for (int i = 0; i < oddCount; i++) {
      if (i != 0) printf(",");
      printf("%d", odd);
    }
    for (int i = 0; i < evenCount; i++) {
      printf(",%d", even);
    }
    printf("\n");
}

int main() {
    char input;
    fgets(input, sizeof(input), stdin);

    // 移除输入字符串末尾的换行符
    input = '\0';

    splitAndPrintArray(input);

    return 0;
}

### 代码解析
1. **输入处理**: 使用`fgets`来读取一行输入,并移除末尾的换行符。
2. **字符串分割与转化**: 使用`strtok`将输入字符串按逗号分割,并转换为整数存入数组`arr`中。
3. **分类存储**: 遍历数组`arr`,将奇数存入`odd`数组,偶数存入`even`数组。
4. **结果输出**: 按照要求的格式,首先输出奇数组,再输出偶数组,中间用逗号隔开。

这样就能完成题目要求,正确将整数数组分为奇数和偶数两部分,并按照指定顺序输出。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2024-10-27 12:42:31

本帖最后由 jackz007 于 2024-10-27 19:43 编辑

#include <stdio.h>

int main(void)
{
      int b , d , i , j , k , n = 0                                 ;
      do {
                scanf("%d" , & d)                                       ;
      } while(getchar() != '\n')                                          ;
      for(b = i = 0 ; i < n ; i ++) {
                if(d % 2) {
                        if(i > b) {
                              k = d                                    ; // d 即将被删除,先对 d 备份
                              for(j = i + 1 ; j < n ; j ++) d = d ; // 从 d 起,全部元素整体向前移动一个元素,从数组中删除 d
                              for(j = n - 1 ; j > b ; j --) d = d ; // 从 d 起,全部元素整体向后移动一个元素,空出 d
                              d = k                                    ; // 把备份的 d 移入 d
                         }
                         b ++                                                 ;
                }
      }
      printf("%d" , d)                                                   ;
      for(int i = 1 ; i < n ; i ++) printf(",%d" , d)                  ;
      printf("\n")                                                          ;
}
      编译运行实况:
D:\\C>g++ -o x x.c

D:\\C>x
1,2,33,8,5
1,33,5,2,8

D:\\C>x
5,4,3,2,1,6,7,8,9,10,11
5,3,1,7,9,11,4,2,6,8,10

D:\\C>

页: [1]
查看完整版本: 数组元素移动