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

探讨了如何通过交换数字的相邻位,将任意整数转换为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 }

 

 
基于径向基函数神经网络RBFNN的自适应滑模控制学习(Matlab代码实现)内容概要:本文介绍了基于径向基函数神经网络(RBFNN)的自适应滑模控制方法,并提供了相应的Matlab代码实现。该方法结合了RBF神经网络的非线性逼近能力滑模控制的强鲁棒性,用于解决复杂系统的控制问题,尤其适用于存在不确定性外部干扰的动态系统。文中详细阐述了控制算法的设计思路、RBFNN的结构权重更新机制、滑模面的构建以及自适应律的推导过程,并通过Matlab仿真验证了所提方法的有效性稳定性。此外,文档还列举了大量相关的科研方向技术应用,涵盖智能优化算法、机器学习、电力系统、路径规划等多个领域,展示了该技术的广泛应用前景。; 适合人群:具备一定自动控制理论基础Matlab编程能力的研究生、科研人员及工程技术人员,特别是从事智能控制、非线性系统控制及相关领域的研究人员; 使用场景及目标:①学习掌握RBF神经网络滑模控制相结合的自适应控制策略设计方法;②应用于电机控制、机器人轨迹跟踪、电力电子系统等存在模型不确定性或外界扰动的实际控制系统中,提升控制精度鲁棒性; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,深入理解算法实现细节,同时可参考文中提及的相关技术方向拓展研究思路,注重理论分析仿真验证相结合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值