C# 排列出所有不相同且无重复数字的N位数

  1.        /*----------------------------------------*/
  2.         //Author:旋风
  3.         //Date:2008-09-13 19:02:51
  4.         //Version:V1.0
  5.         //Memo: 排列出所有不相同且无重复数字的N位数
  6.         /*----------------------------------------*/
  7.         long begintime = Environment.TickCount;
  8.         private void button6_Click(object sender, EventArgs e)
  9.         {
  10.             int slen = 4;//长度
  11.             int wlen = 3;//位数,<=长度
  12.             List<string> sarr = new List<string>();
  13.             for (int i = 1; i <= slen; i++)
  14.             {
  15.                 sarr.Add(i.ToString());
  16.             }
  17.             string ts = string.Empty;
  18.             Random rad = new Random();
  19.             ArrayList al = new ArrayList();//数组
  20.             int len = 1;//总数
  21.             int tlen = slen - wlen + 1;//排列
  22.             while (slen >= tlen)
  23.             {
  24.                 len = len * (slen--);
  25.             }
  26.             while (al.Count < len)
  27.             {
  28.                 while (ts.Length < wlen)
  29.                 {
  30.                     string tmp = sarr[rad.Next(sarr.Count)];
  31.                     if (ts.IndexOf(tmp) < 0)
  32.                         ts += tmp;
  33.                 }
  34.                 if (!al.Contains(ts))
  35.                     al.Add(ts);//添加
  36.                 ts = "";
  37.             }
  38.             al.Sort();//排序
  39.             long endtime = Environment.TickCount;
  40.             long stime = endtime - begintime;//耗时
  41.             MessageBox.Show(string.Format("排列出{0}个不相同且无重复数字的{1}位数!/r/n耗时{2}毫秒", len, wlen, stime));
  42.             richTextBox1.Clear();
  43.             for (int i = 0; i < al.Count; i++)
  44.             {
  45.                 richTextBox1.AppendText(al[i].ToString() + "/r/n");//输出
  46.             }
  47.         }
C#中,我们可以使用循环和递归来计算四个数字1、2、3、4可以组成的互不相同且无重复数字的三位数的数量,并列所有可能的组合。这里我们先计算总数,然后用一个数组存储所有的三位数。 ```csharp using System; class Program { static void Main() { int[] digits = {1, 2, 3, 4}; int totalCombinations = 0; List<int> threeDigitNumbers = new List<int>(); // 计算总组合数 for (int first_digit = 1; first_digit <= digits.Length; first_digit++) { for (int second_digit = first_digit + 1; second_digit <= digits.Length; second_digit++) { for (int third_digit = second_digit + 1; third_digit <= digits.Length; third_digit++) { totalCombinations++; } } } Console.WriteLine($"可以组成{totalCombinations}个互不相同且无重复数字的三位数。"); // 构造并打印三位数列表 GenerateThreeDigitNumbers(digits, "", totalCombinations - 1, threeDigitNumbers); Console.WriteLine("所有的三位数组合为:"); foreach (var number in threeDigitNumbers) { Console.Write(number + " "); } } static void GenerateThreeDigitNumbers(int[] digits, string currentNum, int remaining, List<int> result) { if (remaining == 0 && currentNum.Length == 3) { result.Add(Int32.Parse(currentNum)); return; } for (int i = 0; i < digits.Length; i++) { if (!currentNum.Contains(digits[i].ToString())) { currentNum += digits[i].ToString(); GenerateThreeDigitNumbers(digits, currentNum, remaining - 1, result); currentNum = currentNum.Substring(0, currentNum.Length - 1); // 撤销当前位数 } } } } ``` 运行这个程序会输结果: - 可以组成6个互不相同且无重复数字的三位数。 - 所有的三位数组合为: 123 132 213 231 312 321
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值