从题目上看,这个感觉好绕口。其实嘛应该是我表述有问题。

举例吧:

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)排列,每两个相同数字中间都间隔了这个数字个数...相关推荐

  1. 遍历矩阵每一行穷举_LeetCode:二维数组—旋转矩阵

    点击上方蓝字关注我们 题目描述:"给衣服N*N的矩阵表示图像,其中每个像素的大小为4字节,设计一个算法,图像旋转90度" 示例: matrix=[[1, 2, 3],[4, 5, ...

  2. java数组从小到大_JAVA中给定一个数组,怎么把它里的数从小到大排列输出?

    展开全部 方法copy如2113下:52614102 import java.util.Random; public class Test{ public static void main(Strin ...

  3. JS if 水仙花数 游乐园门票计算 闰年 三元运算符 for循环 算法 穷举法 While 拔萝卜 等差数 随机数函数random 区间数 猜数字

         算法题 水仙花数  数学方法 字符串方法   游乐园门票计算  Switch   闰年 <body> <script>var month = Number(promp ...

  4. 简析穷举算法,及其简单应用

    简析穷举算法,及其简单应用 穷举概述 穷举法又称列举法,其基本思想是逐一列举问题所涉及的所有情况. 穷举法常用于解决"是否存在"或"有多少种可能"等问题. 应用 ...

  5. 本周小贴士#147:负责地使用穷举witch语句

    作为TotW#147最初发表于2018年4月19日 由Jim Newsome创作 介绍 使用 -Werror 编译器标志,如果枚举的任何枚举数没有相应的大小写,则没有默认标签的枚举类型值的 switc ...

  6. python三种方法开根号(穷举法、二分法、牛顿拉夫逊法)

    文章目录 方法一:穷举法 方法二:二分法 方法三:牛顿-拉夫逊算法 总结 方法一:穷举法 positive_num = int(input("输入一个正数:")) #无穷逼近法 a ...

  7. 神经网络结构设计指导原则——输入层:神经元个数=feature维度 输出层:神经元个数=分类类别数,默认只用一个隐层 如果用多个隐层,则每个隐层的神经元数目都一样...

    神经网络结构设计指导原则 原文   http://blog.csdn.net/ybdesire/article/details/52821185 下面这个神经网络结构设计指导原则是Andrew NG在 ...

  8. java获取数组穷举_被BAT疯抢的Java工程师,都是怎么拿到年薪50W的offer

    怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名遭到BAT疯抢的架构师. 那么遭到BAT疯抢的架构师应该有怎样的技术知识体系,这不仅是一个刚刚踏入职场的初级程序员也是工作三五年之 ...

  9. java获取数组穷举_递归算法求解遍历(或穷举)问题

    递归算法求解遍历(或穷举)问题 递归问题可以理解为遍历问题,必须遍历出所有的数据来,才能进行相应的运算,比如Fibonacci问题.阶乘问题,必须把每一步的值都遍历出来,然后才能做加法或乘法. 递归算 ...

  10. 一个乒乓球引发的一系列问题(穷举法)

    一.乒乓球对手匹配:A:不和Z,C不和X.Z void Match()//穷举 {  for(char a='X';a<='Z';a++)//A的对手  {   for(char b='X';b ...

最新文章

  1. Vue.js——60分钟组件快速入门(上篇)
  2. EOS生产区块:解析插件producer_plugin
  3. RS 学习笔记 3-1
  4. rabbitmq接口异常函数方法_[项目更新] 集成RabbitMQ队列与EventBus总线
  5. DB2 多表空间 重定向 还原
  6. 第二季-专题5-核心初始化
  7. Python学习路线(课程大纲+Python视频教程+下载地址)
  8. 【飞控开发基础教程3】疯壳·开源编队无人机-串口(基础收发)
  9. Android音视频之不同设备之间的视频通话(webSocket)
  10. Cadence PSpice 补充1:脉冲信号源的详细介绍与使用方法图文演示
  11. 批处理遍历当前目录和子目录查找指定后缀名的文件并修改后缀名
  12. 新书推荐 | 数据流机器学习:MOA实例
  13. TensorFlow实时任意风格迁移,送女朋友的创意礼物有了
  14. 英语专业有计算机课程吗,英语专业转行学计算机能学好吗
  15. asp.net 改变css,使用ASP.NET动态设置CSS值
  16. JZOJ_7.8C组第一题 音乐节拍
  17. 【放弃】notepad++ 云同步怎么玩?
  18. 学计算机要重修一门语言嘛,大学挂科率“最高”的4门科目,不仅要补考还要重修,你中招了吗...
  19. 再见2017,你好2018
  20. 前端页面性能优化 - 字体加载优化

热门文章

  1. 学习HTML5+CSS3的第二天
  2. From Apprentice To Artisan 翻译 08
  3. 多图片的合并(2种方式,可以设置间距)
  4. “10亿元身价”CEO的6个密码
  5. STM32CubeMX使用(六)之RTC及制作时间戳
  6. Django路由控制
  7. Android Activity launchMode研究
  8. 微软全力推广Silverlight 挑战Flash垄断地位
  9. 【翻译】优秀网站的10个技巧
  10. java day57【 Spring 概述 、 IoC 的概念和作用、使用 spring 的 IOC 解决程序耦合 】...