【穷举】用c#实现一个数组(1,1,2,2,3,3,4,4)排列,每两个相同数字中间都间隔了这个数字个数...
从题目上看,这个感觉好绕口。其实嘛应该是我表述有问题。
举例吧:
1,[],1
2,[],[]2
这样子,两个相同数字之间要有几个坑。
其实这个数组计算量不算太大。推理能力好的话,分分钟解决了。
在这里我想通过程序去实现的目的:
1、为了空想这个实现过程,思想斗争了一晚上没睡觉,那种穷举方法比较好。其实我都没写过穷举。(--真是想太多)
2、了解下穷举算法。(我也不知道我下面写的方法算不算穷举。哈哈)
首先我们得有一个思路。【穷举出所有可能出现的排列方式=>规则匹配符合要求的数组 =>输出】
第一步:穷举
我的第一个错误的实现方法,我也写出来不怕丢人(嘿嘿)。那是这样的:
既然有八个位置。那么不考虑重复的情况下。(即默认它都是不相同的)
我们先定义八个字符串。
1 string[] strs = new string[8] { "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8" }; 2 string[] temp = new string[8]; 3 int x=0; 4 for (int i = 0; i < strs.Length; i++) 5 { 6 temp[0] = strs[i]; 7 for (int i1 = 0; i1 < strs.Length; i1++) 8 { 9 if (temp[0]!=strs[i1]) 10 { 11 temp[1] = strs[i1]; 12 for (int i2 = 0; i2 < strs.Length; i2++) 13 { 14 if (temp[0] != strs[i2]&&temp[1]!=strs[i2]) 15 { 16 temp[2] = strs[i2]; 17 for (int i3 = 0; i3 < strs.Length; i3++) 18 { 19 if (temp[0] != strs[i3] && temp[1] != strs[i3]&&temp[2]!=strs[i3]) 20 { 21 temp[3] = strs[i3]; 22 for (int i4 = 0; i4 < strs.Length; i4++) 23 { 24 if (temp[0] != strs[i4] && temp[1] != strs[i4] && temp[2] != strs[i4]&&temp[3]!=strs[i4]) 25 { 26 temp[4] = strs[i4]; 27 for (int i5 = 0; i5 < strs.Length; i5++) 28 { 29 if (temp[0] != strs[i5] && temp[1] != strs[i5] && temp[2] != strs[i5] && temp[3] != strs[i5]&&temp[4]!=strs[i5]) 30 { 31 temp[5] = strs[i5]; 32 for (int i6 = 0; i6 < strs.Length; i6++) 33 { 34 if (temp[0] != strs[i6] && temp[1] != strs[i6] && temp[2] != strs[i6] && temp[3] != strs[i6] && temp[4] != strs[i6]&&temp[5]!=strs[i6]) 35 { 36 temp[6] = strs[i6]; 37 for (int i7 = 0; i7 < strs.Length; i7++) 38 { 39 if (temp[0] != strs[i7] && temp[1] != strs[i7] && temp[2] != strs[i7] && temp[3] != strs[i7] && temp[4] != strs[i7] && temp[5] != strs[i7]&&temp[6]!=strs[i7]) 40 { 41 temp[7] = strs[i7]; 42 x++;//作为统计穷举次数 43 44 } 45 46 } 47 } 48 49 } 50 } 51 52 } 53 } 54 55 } 56 } 57 58 } 59 } 60 61 } 62 } 63 64 } 65 } 66 Console.WriteLine(x); 67 Console.ReadLine(); 68 }
血的教训告诉我们8*7*6*5*4*3*2=40320
我尝试过,如果每个字符串数组如果要输出的话,大概需要10分钟左右。更不要说,遍历每个字符串数组然后匹配规则,输出了。这才4个数字的,此方法直接扑街(pu gai)!
第二种方法。直接利用相同的数字去排除。然后穷举:
方法举例:假设第一种方法中的“x1”,“x2”是1那么在第二种方法中 x1,x3,x2 只算一个,在第一种方法中算至少两个。
这种方法直接将数组减少到
不多说直接上代码
整整减少为原来的1/16.
第二步:规则匹配。在所有可能的数组中找出符合要求的数组
穷举完了,接下来就是规则匹配。
遍历数组。然后根据两个相同数在数组中的索引位置差的绝对值为该数值加1;
注意:要考虑到索引超出界限的问题!
1 public static bool IsYes(string[] str)2 {3 bool isYON = false;4 List<string> intList =new List<string>();5 for (int i = 0; i < str.Length; i++)6 {7 try8 {9 10 if (str[i] == str[i + Convert.ToInt32(str[i]) + 1] || str[i] == str[i - Convert.ToInt32(str[i]) - 1]) 11 { 12 intList.Add(str[i]); 13 isYON = true; 14 } 15 else 16 { 17 return false; 18 } 19 } 20 catch (Exception) 21 { 22 23 if (str[i] == str[Math.Abs(i - Convert.ToInt32(str[i]) - 1)]&&intList.Contains(str[i])) 24 { 25 isYON = true; 26 } 27 else 28 { 29 return false; 30 } 31 } 32 } 33 return isYON; 34 }
规则匹配
这样。
这篇文章并没有什么很高的技术含量。反而还比较考验思路的连贯性。
文笔不好,表述有不到位的地方,还请各位多多见谅。
本人对算法基本上是一无所知。如果有好的对算法的学习方法还请不啬赐教。将不胜感激!
如果有更好的实现的方法,或者改进的方法可以在下面评论指出或者发送到我的邮箱 paul_0715 at sina dot com
转载于:https://www.cnblogs.com/mgxiaobo/p/4846508.html
【穷举】用c#实现一个数组(1,1,2,2,3,3,4,4)排列,每两个相同数字中间都间隔了这个数字个数...相关推荐
- 遍历矩阵每一行穷举_LeetCode:二维数组—旋转矩阵
点击上方蓝字关注我们 题目描述:"给衣服N*N的矩阵表示图像,其中每个像素的大小为4字节,设计一个算法,图像旋转90度" 示例: matrix=[[1, 2, 3],[4, 5, ...
- java数组从小到大_JAVA中给定一个数组,怎么把它里的数从小到大排列输出?
展开全部 方法copy如2113下:52614102 import java.util.Random; public class Test{ public static void main(Strin ...
- JS if 水仙花数 游乐园门票计算 闰年 三元运算符 for循环 算法 穷举法 While 拔萝卜 等差数 随机数函数random 区间数 猜数字
算法题 水仙花数 数学方法 字符串方法 游乐园门票计算 Switch 闰年 <body> <script>var month = Number(promp ...
- 简析穷举算法,及其简单应用
简析穷举算法,及其简单应用 穷举概述 穷举法又称列举法,其基本思想是逐一列举问题所涉及的所有情况. 穷举法常用于解决"是否存在"或"有多少种可能"等问题. 应用 ...
- 本周小贴士#147:负责地使用穷举witch语句
作为TotW#147最初发表于2018年4月19日 由Jim Newsome创作 介绍 使用 -Werror 编译器标志,如果枚举的任何枚举数没有相应的大小写,则没有默认标签的枚举类型值的 switc ...
- python三种方法开根号(穷举法、二分法、牛顿拉夫逊法)
文章目录 方法一:穷举法 方法二:二分法 方法三:牛顿-拉夫逊算法 总结 方法一:穷举法 positive_num = int(input("输入一个正数:")) #无穷逼近法 a ...
- 神经网络结构设计指导原则——输入层:神经元个数=feature维度 输出层:神经元个数=分类类别数,默认只用一个隐层 如果用多个隐层,则每个隐层的神经元数目都一样...
神经网络结构设计指导原则 原文 http://blog.csdn.net/ybdesire/article/details/52821185 下面这个神经网络结构设计指导原则是Andrew NG在 ...
- java获取数组穷举_被BAT疯抢的Java工程师,都是怎么拿到年薪50W的offer
怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名遭到BAT疯抢的架构师. 那么遭到BAT疯抢的架构师应该有怎样的技术知识体系,这不仅是一个刚刚踏入职场的初级程序员也是工作三五年之 ...
- java获取数组穷举_递归算法求解遍历(或穷举)问题
递归算法求解遍历(或穷举)问题 递归问题可以理解为遍历问题,必须遍历出所有的数据来,才能进行相应的运算,比如Fibonacci问题.阶乘问题,必须把每一步的值都遍历出来,然后才能做加法或乘法. 递归算 ...
- 一个乒乓球引发的一系列问题(穷举法)
一.乒乓球对手匹配:A:不和Z,C不和X.Z void Match()//穷举 { for(char a='X';a<='Z';a++)//A的对手 { for(char b='X';b ...
最新文章
- Vue.js——60分钟组件快速入门(上篇)
- EOS生产区块:解析插件producer_plugin
- RS 学习笔记 3-1
- rabbitmq接口异常函数方法_[项目更新] 集成RabbitMQ队列与EventBus总线
- DB2 多表空间 重定向 还原
- 第二季-专题5-核心初始化
- Python学习路线(课程大纲+Python视频教程+下载地址)
- 【飞控开发基础教程3】疯壳·开源编队无人机-串口(基础收发)
- Android音视频之不同设备之间的视频通话(webSocket)
- Cadence PSpice 补充1:脉冲信号源的详细介绍与使用方法图文演示
- 批处理遍历当前目录和子目录查找指定后缀名的文件并修改后缀名
- 新书推荐 | 数据流机器学习:MOA实例
- TensorFlow实时任意风格迁移,送女朋友的创意礼物有了
- 英语专业有计算机课程吗,英语专业转行学计算机能学好吗
- asp.net 改变css,使用ASP.NET动态设置CSS值
- JZOJ_7.8C组第一题 音乐节拍
- 【放弃】notepad++ 云同步怎么玩?
- 学计算机要重修一门语言嘛,大学挂科率“最高”的4门科目,不仅要补考还要重修,你中招了吗...
- 再见2017,你好2018
- 前端页面性能优化 - 字体加载优化
热门文章
- 学习HTML5+CSS3的第二天
- From Apprentice To Artisan 翻译 08
- 多图片的合并(2种方式,可以设置间距)
- “10亿元身价”CEO的6个密码
- STM32CubeMX使用(六)之RTC及制作时间戳
- Django路由控制
- Android Activity launchMode研究
- 微软全力推广Silverlight 挑战Flash垄断地位
- 【翻译】优秀网站的10个技巧
- java day57【 Spring 概述 、 IoC 的概念和作用、使用 spring 的 IOC 解决程序耦合 】...