数组元素移动
【问题描述】将整数数组A,将其分为两部分,左边所有元素为奇数,右边所有元素为偶数。数组元素个数不超过1000。
【输入形式】
以逗号隔开的所有元素
【输出形式】
依次打印调整后的数组元素,元素间以逗号隔开。奇数序列和偶数序列分别按原序列中的顺序依次输出
【样例输入】
1,2,33,8,5
【样例输出】
1,33,5,2,8
这题用C或者C++怎么做 好的,让我们用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 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]