Openjudge-计算概论(A)-奇数单增序列

时间:2024-09-29 16:05:38

描述:

给定一个长度为N(不大于500)的正整数序列,请将其中的所有奇数取出,并按升序输出。

输入共2行:
第1行为 N;
第2行为 N 个正整数,其间用空格间隔。输出增序输出的奇数序列,数据之间以逗号间隔。数据保证至少有一个奇数。

样例输入

10
1 3 2 6 5 4 9 8 7 10

样例输出

1,3,5,7,9
思路:这题的解题方法很多,我用的是其中之一的,先把数组排序(快排),再把单数挑出来,存入另一个数组(至于为什么,别问那么多),
先输出第一个,再循环从第二个开始输出,每输出一个之前记得输出一个逗号!
不过这个代码没能通过,快过年了嘛,Openjudge的服务器好像放假了,老是出错,期待春节回来修复吧......
我的代码如下:
 #include <stdio.h>
#include <stdlib.h>
int fun(const void *a,const void *b)
{
return *(int*)a-*(int*)b;
}
int main()
{
int n,i,a[],b[];
int j=;
scanf("%d",&n);
for(i=;i<n;i++)
{
scanf("%d",&a[i]);
}
qsort(a,n,sizeof(int),fun);
for(i=;i<n;i++)
{
if(a[i]%==)
{
b[j]=a[i];
j++;
}
}
printf("%d",b[]);
for(i=;i<j;i++)
{
printf(",%d",b[i]);
}
printf("\n");
return ;
}

这是我老师的代码(http://www.cnblogs.com/huashanqingzhu/p/3474573.html)这个是可以通过的,不造那个服务器怎么搞的:

 #include<stdio.h>
int main()
{
int n,a[],i,j,t,flag;
scanf("%d",&n);
for(i=;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=;i<n;i++)
{
flag=;
for(j=;j<n-i;j++)
{
if(a[j]>a[j+])
{
flag=;
t=a[j];
a[j]=a[j+];
a[j+]=t;
}
}
if(flag) break; //if(flag==1) break;
}
flag=;
for(i=;i<n;i++)
{
if(a[i]&)
{
if(flag)
{
printf("%d",a[i]);
flag=;
}
else printf(",%d",a[i]);
} }
printf("\n");
return ;
}