哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级) J 小乐乐和25 【分类】

题目描述 

小乐乐特别喜欢25这个数字,他想把所有的数字都变成25的倍数。
现在小乐乐得到一个数字,想问问你最少用几次操作才可以把这个数字改造成25的倍数。
对于一次操作我们可以把相邻的两位做交换,比如123经过一次操作之后就可以变成213或者132。
 

输入描述:

多组数据输入

对于每组数据,只有一行输入一个整数n(1 <= n <= 1000000000)。

输出描述:

如果经过最少x次操作后,这个数就变成了25的倍数,那么输出x;

如果这个数无论怎么变化都变不成25的倍数,输出-1.
 
 

解题思路:

写出25的倍数

25、50、100、125、150、175、200、225、250、275、300....

其实最后交换得到的数能不能被 25 整除 关键在于 最后两位 是不是 00、 25、 50、 75

因为百位以上可以被 100 整除,所以判断 最后两位即可,分四类讨论一下,判断那种交换方式操作次数最小。

AC  code:

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <algorithm>
 5 #include <cmath>
 6 #include <map>
 7 #define INF 0x3f3f3f3f
 8 #define LL long long
 9 using namespace std;
10 const int MAXN = 100;
11 char num[MAXN];
12 int len;
13 
14 int cou(int v1, int v2)
15 {
16     if(v1==len-1)   return len-1-v2;
17     else if(v2<v1)   return len-2-v1-1+len-1-v2;
18     else if(v1<v2)   return len-2-v1+len-1-v2;
19     return 100;
20 }
21 
22 int main()
23 {
24     while(~scanf("%s", num)){
25         len = strlen(num);
26         int zo1 = -1, zo2 = -1, sev = -1, two = -1, five = -1;
27         for(int i = len-1; i >= 0; i--){
28             if(num[i] == '0'){
29                 if(zo2 != -1) continue;
30                 if(zo1 == -1) zo1 = i;
31                 else zo2 = i;
32             }
33 
34             if(num[i] == '2'){
35                 if(two == -1) two = i;
36             }
37 
38             if(num[i] == '5'){
39                 if(five == -1) five = i;
40             }
41 
42             if(num[i] == '7'){
43                 if(sev == -1) sev = i;
44             }
45         }
46         int ans = 101;
47         if(zo1 != -1 && zo2 != -1) ans = min(ans, cou(zo2, zo1));   //00
48         if(two != -1 && five != -1) ans = min(ans, cou(two, five)); //25
49         if(five != -1 && zo1 != -1) ans = min(ans, cou(five, zo1)); //50
50         if(sev != -1 && five != -1) ans = min(ans, cou(sev, five));  //75
51 
52         if(ans == 101) puts("-1");
53         else printf("%d\n", ans);
54     }
55     return 0;
56 
57 }
 

猜你喜欢

转载自www.cnblogs.com/ymzjj/p/10052530.html