首页 > 代码库 > 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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。