题目:蒜头君给了一个长度为?N(不大于?500)的正整数序列(正整数的值不超过?N),请将其中的所有奇数取出,并按升序输出。
输入格式
共?2?行:
第?1行为?N;
第?2?行为?N?个正整数,其间用空格间隔。
输出格式
增序输出的奇数序列,数据之间以逗号间隔。数据保证至少有一个奇数。
【错误示例】
只是输出了500内的所有奇数,不符合题目的数列中提取奇数并排序
# include <stdio.h>
int main(){
int i;
for(i=1;i<=500;i+=2)
{
printf("%d\n",i);
}
getchar();
return 0;
}
所以改正后的代码如下:
定义两个数组,从数组A中提取所有的奇数赋值给数组B,给数组B进行排序。
#include<stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n];//定义数组a,b
int b[n];
int i;
int c=0;
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(i=0;i<n;i++){
if(a[i]%2!=0){//将数组a中的奇数提取
b[c]=a[i];//将从数组a中提取出来的奇数赋值给数组b
c++;//计数
}
}
int j,t;定义一个临时数组
for(i=1;i<c;i++){
j=i-1;
t=b[i];//暂时将数组b的奇数都赋值给t
while(j>=0&&t<b[j]){//从a[i]开始比较,直到前一位数小于它或i=0
b[j+1]=b[j];//如果出现一项值小于a[i],则将a[i]的值赋给a[i+1],a[i-1]的值赋给a[i],以此类推
j--;
}
b[j+1]=t; //将排序完的空a[j+1]赋值给t
}
for(i=0;i<c;i++){
printf("%d",b[i]);
if(i!=c-1){
printf(",");
}
}
return 0;
}
|