首页 > 代码库 > hdu 5055 Bob and math problem

hdu 5055 Bob and math problem

先把各个数字又大到小排列,如果没有前导零并且为奇数,则直接输出。如果有前导零,则输出-1。此外,如果尾数为偶数,则从后向前找到第一个奇数,并把其后面的数一次向前移动,并把该奇数放到尾部。

值得注意的是当输入为960时,通过这种方法会得到具有前导零的数字。因此最后需要判断进行移动后,首位是否为零。

代码如下:

 1 #define MAXN 101 2 #include <stdlib.h> 3 #include <iostream> 4 #include <cstdio> 5 #include <algorithm> 6 using namespace std; 7 int arr[MAXN]; 8 int N; 9 bool comp(int a, int b)10 {11     return a>b;12 }13 14 void p(int *a)15 {16     for( int i = 0 ; i < N ; i++ )17     {18         printf("%d", a[i]);19     }20     printf("\n");21 }22 void solve()23 {24     sort(arr, arr+N, comp);  25     if( arr[N-1] & 1 && arr[0] != 0)26     {27         p(arr);28     }29     else if( arr[0] == 0 )30     {31         printf("%d\n", -1);32     }33     else34     {35         for( int i = N-2 ; i >= 0 ; i-- )36         {37             if( arr[i] & 1 )38             {39                 int tmp = arr[i];40                 for( int j = i+1 ; j <= N-1 ; j++ )41                 {42                     arr[j-1] = arr[j];43                 }44                 arr[N-1] = tmp;45                 break;46             }47         }48         if( arr[N-1] & 1  && arr[0] != 0)49         {50             p(arr);51         }52         else53         {54             printf("%d\n", -1);55         }56     }57 }58 int main(int argc, char *argv[])59 {60     while( scanf("%d", &N ) != EOF)61     {62         for( int i = 0 ; i < N ; i++ )63         {64             scanf("%d", &arr[i]);65         }66         solve();67     }68     return 0;69 }

 

hdu 5055 Bob and math problem