C# 排列出所有不相同且无重复数字的N位数
2008-09-13 18:57
316 查看
/*----------------------------------------*/
//Author:旋风
//Date:2008-09-13 19:02:51
//Version:V1.0
//Memo: 排列出所有不相同且无重复数字的N位数
/*----------------------------------------*/
long begintime = Environment.TickCount;
private void button6_Click(object sender, EventArgs e)
{
int slen = 4;//长度
int wlen = 3;//位数,<=长度
List<string> sarr = new List<string>();
for (int i = 1; i <= slen; i++)
{
sarr.Add(i.ToString());
}
string ts = string.Empty;
Random rad = new Random();
ArrayList al = new ArrayList();//数组
int len = 1;//总数
int tlen = slen - wlen + 1;//排列
while (slen >= tlen)
{
len = len * (slen--);
}
while (al.Count < len)
{
while (ts.Length < wlen)
{
string tmp = sarr[rad.Next(sarr.Count)];
if (ts.IndexOf(tmp) < 0)
ts += tmp;
}
if (!al.Contains(ts))
al.Add(ts);//添加
ts = "";
}
al.Sort();//排序
long endtime = Environment.TickCount;
long stime = endtime - begintime;//耗时
MessageBox.Show(string.Format("排列出{0}个不相同且无重复数字的{1}位数!/r/n耗时{2}毫秒", len, wlen, stime));
richTextBox1.Clear();
for (int i = 0; i < al.Count; i++)
{
richTextBox1.AppendText(al[i].ToString() + "/r/n");//输出
}
}
//Author:旋风
//Date:2008-09-13 19:02:51
//Version:V1.0
//Memo: 排列出所有不相同且无重复数字的N位数
/*----------------------------------------*/
long begintime = Environment.TickCount;
private void button6_Click(object sender, EventArgs e)
{
int slen = 4;//长度
int wlen = 3;//位数,<=长度
List<string> sarr = new List<string>();
for (int i = 1; i <= slen; i++)
{
sarr.Add(i.ToString());
}
string ts = string.Empty;
Random rad = new Random();
ArrayList al = new ArrayList();//数组
int len = 1;//总数
int tlen = slen - wlen + 1;//排列
while (slen >= tlen)
{
len = len * (slen--);
}
while (al.Count < len)
{
while (ts.Length < wlen)
{
string tmp = sarr[rad.Next(sarr.Count)];
if (ts.IndexOf(tmp) < 0)
ts += tmp;
}
if (!al.Contains(ts))
al.Add(ts);//添加
ts = "";
}
al.Sort();//排序
long endtime = Environment.TickCount;
long stime = endtime - begintime;//耗时
MessageBox.Show(string.Format("排列出{0}个不相同且无重复数字的{1}位数!/r/n耗时{2}毫秒", len, wlen, stime));
richTextBox1.Clear();
for (int i = 0; i < al.Count; i++)
{
richTextBox1.AppendText(al[i].ToString() + "/r/n");//输出
}
}
相关文章推荐
- 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。
- 程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不
- 1/22 测试一(STL 模拟 贪心)A.(next_permutation() 求四个数字组成的所有四位数) 排列2
- java 循环问题 大全 求2~100a之内的素数。求水仙花数:(1~1000)。有1、2、3、4四个数字,输出所有能组成的互不相同且无重复的三位数。打印空心菱形
- 编写一个Java应用程序。用户从键盘输入一个1—9999之间的数,程序将判断这个数是几位数, 并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同, 例如12121、3
- c#面试题 查找整型数组中重复出现次数最多的数字,次数相同数字按从小到大排序
- 排列(permutation):用1,2,3,...,9组成3个三位数abc, def和ghi,每个数字恰好使用一次,要求abc:def:ghi = 1:2:3。输出所有解。提示:不必太动脑筋。
- 有n个1-9的互不重复的数字,能组成多少个互不相同且无重复数字的n-1位数?都是多少?
- 编写一个Java应用程序。用户从键盘输入一个1—9999之间的数,程序将判断这个数是几位数,并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121、3223都
- 给定一个数字列表,返回其所有可能的排列。 注意事项 你可以假设没有重复数字。
- 给定可能包含重复的数字的集合,返回所有可能的唯一排列。
- 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?请输出所有组合
- 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数? 都是多少?
- 【穷举】用c#实现一个数组(1,1,2,2,3,3,4,4)排列,每两个相同数字中间都间隔了这个数字个数
- 2. 编写一个Java应用程序,用户从键盘输入一个1~9999之间的数,程序将判断这个数是几位数,并判断这个数是否是回文数。回文数是指将该数含有的数字逆序排列后得到的数和原数相同,例如12121、32
- 一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。
- 找出所有六位数的平方数中未出现与原数中重复数字的所有数
- 利用1、2、2、3、4这5个数字,打印出所有不同的排列,不能有重复
- 假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从1234出发,依次可以得到4321-1234=3087、87
- 列举1~30所有中的k,k^2,k^3都含有相同的数字d——我的艰难求解过程