描述:
给定一个长度为N(不大于500)的正整数序列,请将其中的所有奇数取出,并按升序输出。
输入共2行:
第1行为 N;
第2行为 N 个正整数,其间用空格间隔。输出增序输出的奇数序列,数据之间以逗号间隔。数据保证至少有一个奇数。
样例输入
10 1 3 2 6 5 4 9 8 7 10
样例输出
1,3,5,7,9
思路:这题的解题方法很多,我用的是其中之一的,先把数组排序(快排),再把单数挑出来,存入另一个数组(至于为什么,别问那么多),
先输出第一个,再循环从第二个开始输出,每输出一个之前记得输出一个逗号!
不过这个代码没能通过,快过年了嘛,Openjudge的服务器好像放假了,老是出错,期待春节回来修复吧......
我的代码如下:
1 #include <stdio.h> 2 #include <stdlib.h> 3 int fun(const void *a,const void *b) 4 { 5 return *(int*)a-*(int*)b; 6 } 7 int main() 8 { 9 int n,i,a[200],b[200]; 10 int j=0; 11 scanf("%d",&n); 12 for(i=0;i<n;i++) 13 { 14 scanf("%d",&a[i]); 15 } 16 qsort(a,n,sizeof(int),fun); 17 for(i=0;i<n;i++) 18 { 19 if(a[i]%2==1) 20 { 21 b[j]=a[i]; 22 j++; 23 } 24 } 25 printf("%d",b[0]); 26 for(i=1;i<j;i++) 27 { 28 printf(",%d",b[i]); 29 } 30 printf(" "); 31 return 0; 32 }
这是我老师的代码(http://www.cnblogs.com/huashanqingzhu/p/3474573.html)这个是可以通过的,不造那个服务器怎么搞的:
1 #include<stdio.h> 2 int main() 3 { 4 int n,a[500],i,j,t,flag; 5 scanf("%d",&n); 6 for(i=0;i<n;i++) 7 { 8 scanf("%d",&a[i]); 9 } 10 for(i=1;i<n;i++) 11 { 12 flag=1; 13 for(j=0;j<n-i;j++) 14 { 15 if(a[j]>a[j+1]) 16 { 17 flag=0; 18 t=a[j]; 19 a[j]=a[j+1]; 20 a[j+1]=t; 21 } 22 } 23 if(flag) break; //if(flag==1) break; 24 } 25 flag=1; 26 for(i=0;i<n;i++) 27 { 28 if(a[i]&1) 29 { 30 if(flag) 31 { 32 printf("%d",a[i]); 33 flag=0; 34 } 35 else printf(",%d",a[i]); 36 } 37 38 } 39 printf(" "); 40 return 0; 41 }