描述:
给了一个长度为 NN(不大于 500500)的正整数序列(正整数的值不超过 NN),请将其中的所有奇数取出,并按升序输出。
输入格式
int型
输出格式
增序输出的奇数序列,数据之间以逗号间隔。数据保证至少有一个奇数。
输入样例
10 1 3 2 6 5 4 9 8 7 10
输出样例
1,3,5,7,9
解题思路:以数组的形式进行前后比较,先排列顺序,由小到大,再将奇数挑出来,由于最后用逗号隔开,且不确定第一个数,所以用空格替代的方式将最后一个逗号去掉。也可以输出a[0]其余用“,a[j+1]”
#include <stdio.h>
int main(void) {
int a[100];
int n, i, j, t;
scanf("%d", &n); //n为要排序的数的个数
//输入需要排序的数
for (i = 0; i < n; ++i)
scanf("%d", a + i);//a+1就是指向了第二个元素,即a[1]。
//开始排序
for (i = 0; i < n - 1; ++i) { //每次为相邻的两个数进行比较,共比较n-1次
for (j = i + 1; j < n; ++j) { //j从i后一个开始,a[i]与a[j]进行比较
if (a[i] > a[j]) { //a[i]为当前值,若是比后面的a[j]大,进行交换
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}//每排序一次,就会将a[i](包括a[i])之后的最小值放在a[i]的位置
for (j = 0; j < n; ++j)
if (a[j] % 2)//如果为奇数则输出
printf("%d,", a[j]);//输出排过序的奇数
printf("\b \n");//\b表示光标后退一格,\b退到逗号位置空格代替,
return 0;
}
a是数组名,同时也是数组的首地址,指向数组的第一个元素。a+1就是将a的值(地址)加上单个数组元素个长度(在这里是一个Int的长度),所以a+1就是指向了第二个元素,即a[1]。因为它是地址,所以在使用的根据情况加上解引用操作符。