您的位置:首页 > 其它

简洁精美源于分析透彻,构思明确、求精,逻辑练达。(8)

2017-01-07 19:41 344 查看
/*列如构造出5-100000所有的回文数。不是要顺序查找的方法!!是自己一个一个的构造来提高效率!
回文数由2位以上组成,如:11,22,111,222,1111,2222,总结规律得:基数*10+位数,
2位数以上有2种方法,分别生成-1位的奇位数和*2位的偶位数,
如2位数*2=4位数,-1=3位数,3位数*2=6位数,-1=5位数,此后类推
这里只举例,实行了分析的思路,至于具体细节的调整就不写了,
其实,就是把封装改为有返回Func <>封装,用回文数进行判断是否大于变量 止 来终止运行即可*/
int 始 = 1, 止 = 1000;
List<int> 回文数 = new List<int>();
Action<int, int> 合成回文 = (基数, 回数) =>
{
do/*基数*10+位数算法*/
{
基数 = 基数 * 10 + 回数 % 10;
} while ((回数 /= 10) > 0);
回文数.Add(基数);
//Console.Write("回{0}:", 基数);
};
do
{
if (始 >= 10)/*生成奇位*/
合成回文(始, 始 / 10);
合成回文(始, 始);/*生成偶位*/
} while (++始 < 止);
回文数 = 回文数.OrderBy(升序 => 升序).ToList();
Console.Write(string .Join (":", 回文数));

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: