蒜头君给了一个长度为?N(不大于?500)的正整数序列(正整数的值不超过?N),请将其中的所有奇数取出,并按升序输出。
输入格式
共?2?行:
第?1行为?N;
第?2?行为?N?个正整数,其间用空格间隔。
输出格式
增序输出的奇数序列,数据之间以逗号间隔。数据保证至少有一个奇数。
Sample Input(样例输入)
10
1 3 2 6 5 4 9 8 7 10
Sample Output(样例输出)
1,3,5,7,9
#include<stdio.h>
int main()
{ int n,temp,j,i,a[999],d,flat=1;//标记flat为0 随便定义了一个999个数据的数组
scanf("%d",&n);//循环输入数组
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<n;i++)
{
j=i-1;
temp=a[i];//利用了插入排序法,首先将第二个数组值存储入temp里
while(a[j]>temp&&j>=0)
{//重点 每一次结束while的循环后都要把temp值往后面移动一位
a[j+1]=a[j];//比较temp值与前一位数组值的大小,若temp比前一项值大,
j--;//(符合从小到大排序的条件),则j--,比较temp与前二项的值
}//若temp比前一项值小,则将前一项值赋给后面一位,前一项等于后一项的值
a[++j]=temp;//继续循环比较temp与前第二项的值,与此类推。++i,与i++地区别,前者是先加1后再操作,后者是先执行完再加1
} //把temp值赋给第j的后一位 ,替代了刚刚前一项数组的值 ,
for(i=0;i<n;i++)//这样就完成了从小到大数组的排序
{ d=a[i];//最后依次输出数组,用for循环从小到大 ,注意题目的格式
if(d%2!=0&&flat==1)//输出的第一个数仅仅为单个数字 %d ,输出后作标记令flat==1
{printf("%d",d);flat=2;
}
else if(d%2!=0&&flat==2)
{
printf(",%d",d);//下一次输出就直接输出 ,%d 符合题目条件
}
}printf("\n");//前往要注意结尾要加换行符号
}
?如果你喜欢我的文章,请给我点赞+关注,算是对我最大的支持,真诚地感谢读者。
|