如何由A-Z,a-z,0-9等62个元素组成一个16位的字符串,要求相邻两位不能相同,且一个元素最多只能出现两次,而且出现两次的元素个数最多只能两个,请问这个算法要如何来写?
4条回答 默认 最新
- Anne_liusha 2016-08-19 03:29关注
List result = new List(); //保存所有的可能字符 最终要的数据
List nunm = new List();//保存保存每一次可能字符数组形式
public void Index() //启动方法
{
List E = new List();
List e = new List();
int start = 65;
int end = 90;
while (start <= end) {
E.Add(((char)start).ToString());
e.Add(((char)start).ToString().ToLower());
start++;
}
List nums = new List();
for (int i = 1; i <= 9; i++) {
nums.Add(i.ToString());
}for (int i = 0; i < E.Count; i++) { nunm.Add(E[i]); functo(nunm); for (int j = 0; j < e.Count; j++) { nunm.Add(e[j]); functo(nunm); for (int k = 0; k < nums.Count; k++) { nunm.Add(nums[k]); functo(nunm); } } } } public void functo(List<string> nunm) { int count = 0; for (int a = 0; a < nunm.Count - 1; a++) { //相邻不相同 if (nunm[a] == nunm[a + 1]) { nunm.RemoveAt(nunm.Count - 1); break; } for (int b = a + 1; b < nunm.Count; b++) { int silcount = 0; if (String.Compare(nunm[a], nunm[b]) == 0) { silcount++; } if (silcount > 3) { nunm.RemoveAt(nunm.Count - 1); return; } if (silcount > 0) { count++; } if (count > 2) { count = 0; nunm.RemoveAt(nunm.Count - 1); // nunm.Remove(nunm[nunm.Count - 1]); return; } } } if (nunm.Count == 16) { string aa = ""; foreach (var item in nunm) { aa += item; } result.Add(aa); nunm.RemoveAt(nunm.Count - 1); return; } }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度
- ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
- ¥15 ETLCloud 处理json多层级问题
- ¥15 matlab中使用gurobi时报错
- ¥15 这个主板怎么能扩出一两个sata口
- ¥15 不是,这到底错哪儿了😭
- ¥15 2020长安杯与连接网探
- ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么