A - 简单排序
题目:蒜头君给了一个长度为 N(不大于 500)的正整数序列(正整数的值不超过 N),请将其中的所有奇数取出,并按升序输出。
输入格式
共 2 行:
第 1 行为 N;
第 2 行为 N 个正整数,其间用空格间隔。
输出格式
增序输出的奇数序列,数据之间以逗号间隔。数据保证至少有一个奇数。
输入样例
10 1 3 2 6 5 4 9 8 7 10
输出样例
1,3,5,7,9
掌握要点:
冒泡循环:从前端开始,每两个下标相邻的元素为一组互相比较判断大小,保证每一组元素都是后边的比前边的大。最后保证整个数组的最后两个位置也都是后边比前边大之后第1遍冒泡就结束了,这时整个数组的最后一位就是这个数组中最大的数。然后同样的方法把结束冒泡的标志换成保证倒二和倒三都是后边比前边大之后第2遍
冒泡就结束了,这时整个数组的倒数第二位就是这个数组中第二大的数。等到进行完多遍冒泡后整个数组就会全部排序好。
解题思路:先将这N个数中的奇数挑出放到数组中,利用冒泡循环将数组中的奇数按升序排列,最后遍历数组输出即可。
运行代码
#include <stdio.h>
int main() {
int N, a[500], n, k = 0;//定义一个数组储存N个数中的奇数
scanf("%d", &N);
for (int i = 1; i <= N; i++) {
scanf("%d", &n);
if (n % 2 != 0) //如果输入的数为奇数则将它放到数组中
{
a[k] = n;
k++;//记录此时数组中数的个数
}
}
//冒泡排序
int b, c, t;
for (b = 0; b < k; b++) {//k等于保存的奇数个数
for (c = b + 1; c < k; c++) {//让c从b+1开始,始终大于b
if (a[b] > a[c]) {//比较前一个数和后一个数的大小并交换
t = a[b];
a[b] = a[c];
a[c] = t;
}
}
}
for (int i = 0; i < k; i++) {
printf("%d", a[i]);//输出排序后的数组
if (i != k - 1) {
printf(",");//控制标点符号的输出
}
}
return 0;
}