求1个算法 有这样一个字符串输入:A000Z-B360Z输出 A000ZA001Z……A360ZB001ZB002Z……B360Z 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 for (int i = (int)s1[0]; i <= (int)s2[0]; i++) for (int j = int.Parse(s1.SubString(1, 3); j <= int.Parse(s2.SubString(1, 3); j++) Console.WriteLine(((char)i).ToString() + j.ToString().PadLenft(3, '0') + "Z"); string s1 = "A000Z", s2 = "B360Z"; 如果输入是A000Z-B360Z 或者是0000A-3600B 这样的格式呢? 00A0000A01……35B9936A0000B0000B01……35B9936B00 应该是变进制数的枚举。using System;using System.Collections.Generic;using System.Linq;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { //A000Z //A001Z //…… //A360Z //B001Z //B002Z //…… //B360Z var rad = new List<string[]>(3); //就把它当一个三位数,个位是1进制,十位360+1进制,百位2+1进制 rad.Add(new[] { "A", "B" }); rad.Add(Enumerable.Range(0, 361).Select(i => i.ToString("000")).ToArray()); rad.Add(new[] { "Z" }); foreach (var item in new VarNumberEnum(rad.ToArray()).Enum()) { Console.Write(item + "\t"); } //00A00-36B00 rad.Clear(); rad.Add(Enumerable.Range(0, 37).Select(i => i.ToString("00")).ToArray()); rad.Add(new[] { "A", "B" }); rad.Add(Enumerable.Range(0, 100).Select(i => i.ToString("00")).ToArray()); foreach (var item in new VarNumberEnum(rad.ToArray()).Enum()) { Console.Write(item + "\t"); } } } class VarNumberEnum //实现变进制数枚举 { string[][] rad; public VarNumberEnum(params string[][] rad) { //if rad.length==0??? if rad[x]==0??? this.rad = rad; } internal IEnumerable<string> Enum() { var enumerators = rad.Select(r => r.GetEnumerator()).ToArray(); //每个元素代表一“位” Array.ForEach(enumerators, enumerator => enumerator.MoveNext()); //先返回第1个 yield return string.Concat(enumerators.Select(e => e.Current)); while (true) { for (var i = rad.Length - 1; i >= 0; i--) { if (enumerators[i].MoveNext()) //+1成功,中止循环。+1不成功再从0开始并进位 { break; } if (i == 0) //循环完了,中止 { yield break; } enumerators[i].Reset(); enumerators[i].MoveNext(); } yield return string.Concat(enumerators.Select(e => e.Current)); } } }} 如果是数字和字母的位置,不固定的例如0A000-3B600或者00A0A-36C0C这个前提是字母和数字的顺序,必须是对应的 和我原来写的序号生成表达式有点类似啊。不过我用的是偏正则的方式:[00-30][A-C,Z][000-999]简单提下我的思路,每个中括号里是一个范围表达式,分割计算每个表达式中的所有可能字符串,生成一个string[]。如上,就会有3个字符串数组,然后用递归的方式将3个字符串数组合并成一个 dataGridView中无法获取新行集的问题。 关于“返回”的问题! ASP.net的错误 关于ODP.Net的安装.(和腊人张同样的问题,求助...) 高分求助! .................................... 如何获得dataGridView 中指定单元格的值 编译窗口一闪而过,闪的好快我不知该怎样做 异步?~~~~~ C#怎样从资源文件或音频流中获取音频的时长? TransactionOptions 帮忙看一下,这两个是什么控件啊 datagridview选中行事件
for (int j = int.Parse(s1.SubString(1, 3); j <= int.Parse(s2.SubString(1, 3); j++)
Console.WriteLine(((char)i).ToString() + j.ToString().PadLenft(3, '0') + "Z");
A000Z-B360Z 或者是
0000A-3600B 这样的格式呢?
00A01
……
35B99
36A0000B00
00B01
……
35B99
36B00
using System;
using System.Collections.Generic;
using System.Linq;namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//A000Z
//A001Z
//……
//A360Z
//B001Z
//B002Z
//……
//B360Z
var rad = new List<string[]>(3); //就把它当一个三位数,个位是1进制,十位360+1进制,百位2+1进制
rad.Add(new[]
{
"A", "B"
}); rad.Add(Enumerable.Range(0, 361).Select(i => i.ToString("000")).ToArray());
rad.Add(new[]
{
"Z"
}); foreach (var item in new VarNumberEnum(rad.ToArray()).Enum())
{
Console.Write(item + "\t");
} //00A00-36B00
rad.Clear();
rad.Add(Enumerable.Range(0, 37).Select(i => i.ToString("00")).ToArray());
rad.Add(new[]
{
"A", "B"
});
rad.Add(Enumerable.Range(0, 100).Select(i => i.ToString("00")).ToArray());
foreach (var item in new VarNumberEnum(rad.ToArray()).Enum())
{
Console.Write(item + "\t");
}
}
} class VarNumberEnum //实现变进制数枚举
{
string[][] rad; public VarNumberEnum(params string[][] rad)
{
//if rad.length==0??? if rad[x]==0???
this.rad = rad;
} internal IEnumerable<string> Enum()
{
var enumerators = rad.Select(r => r.GetEnumerator()).ToArray(); //每个元素代表一“位” Array.ForEach(enumerators, enumerator => enumerator.MoveNext()); //先返回第1个
yield return string.Concat(enumerators.Select(e => e.Current)); while (true)
{
for (var i = rad.Length - 1; i >= 0; i--)
{
if (enumerators[i].MoveNext()) //+1成功,中止循环。+1不成功再从0开始并进位
{
break;
}
if (i == 0) //循环完了,中止
{
yield break;
}
enumerators[i].Reset();
enumerators[i].MoveNext();
}
yield return string.Concat(enumerators.Select(e => e.Current));
}
}
}
}
例如0A000-3B600
或者00A0A-36C0C这个前提是字母和数字的顺序,必须是对应的