题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5055
思路:排序然后直接取出最小的那一个奇数,注意判断n==1时。。。
code1:
<span style="font-size:18px;">#include<cstdio> #include<iostream> #include<cmath> #include<algorithm> using namespace std; int main() { int n,i; int a[110],b[110]; while(scanf("%d",&n)==1) { int sum=0; int flag; for(i=0;i<n;i++) { scanf("%d",&a[i]); if(a[i]!=0) { sum++; } } if(n==1) { if(a[0]%2==1) { printf("%d\n",a[0]); } else { printf("-1\n"); } continue; } sort(a,a+n); for(i=0;i<n;i++) { if(a[i]%2==1) { flag=i; break; } } if(i==n||sum<=1) { printf("-1\n"); } else { for(i=n-1;i>=0;i--) { if(i!=flag) { printf("%d",a[i]); } } printf("%d\n",a[flag]); } } return 0; } </span>
code2:
<span style="font-size:18px;">#include<cstdio> #include<iostream> #include<cmath> #include<algorithm> using namespace std; int main() { int n,i; int a[110],b[110]; while(scanf("%d",&n)==1) { int minn=10; int sum=0; int flag=0; for(i=0;i<n;i++) { scanf("%d",&a[i]); if(a[i]%2==1) { flag=1; minn=min(minn,a[i]); } if(a[i]!=0) { sum++; } } if(flag==0) { printf("-1\n"); continue; } if(n==1) { if(a[0]%2==1) { printf("%d\n",a[0]); } else { printf("-1\n"); } continue; } if(sum<=1) { printf("-1\n"); continue; } int len=0; int flag1=0; for(i=0;i<n;i++) { if(a[i]==minn&&flag1==0) { flag1=1; } else { b[len++]=a[i]; } } sort(b,b+len); int flag2=0; for(i=len-1;i>=0;i--) { if(b[i]!=0) { printf("%d",b[i]); flag2=1; } else if(flag2==1) { printf("%d",b[i]); } } printf("%d\n",minn); } return 0; }</span>
时间: 2024-10-31 17:49:39