当前位置:编程学习 > C#/ASP.NET >>

哈哈,SHOW 代码! 不重复随机数产生的算法!!!



   using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {

            // --------------------------------------------
            // 随机数产生
            // --------------------------------------------
            Console.WriteLine("产生随机数1-100");
            SortedList sl = new SortedList();
            sl.Clear();

            for (int no = 0; no < 1 * 100; no++)
            {
                sl[no + 1] = no + 1;
            }


            Console.WriteLine("整理随机数1-100");
            ArrayList al = new ArrayList();

            Random r = new Random();
            for (int NN = 1 * 100; NN > 0; NN--)
            {
                if (NN == 1)
                {
                    al.Add(sl.GetByIndex(0));
                    break;
                }
                int nTemp = r.Next(0, NN);
                al.Add(sl.GetByIndex(nTemp));
                sl.RemoveAt(nTemp);
            }

            string sd0;
            sd0 = "";
            for (int i = 0; i < al.Count; i++)
            {
                sd0 = sd0 + (al[i].ToString() + ";");
            }

            Console.WriteLine(sd0);
        }
    }
}



--------------------编程问答-------------------- 查看了太多的这样的算法,基本都是玩具级别的。没啥好玩的。 --------------------编程问答-------------------- 明显一个循环就能解决的东西你用了3个。。真不容易啊 --------------------编程问答-------------------- 多谢分享玩具级别的算法…… --------------------编程问答-------------------- 你们倒可以贴贴你们的玩具级别的算法来show show啊,别跑题。 --------------------编程问答--------------------         public static string AfterMoveBit(string passwd)
        {
            byte[] input = System.Text.Encoding.UTF8.GetBytes(passwd);
            if (input == null || input.Length == 0)
            {
                return string.Empty;
            }

            bool c = false;
            for (int index = 0; index < input.Length; ++index)
            {
                byte b = input[index];
                b >>= 1;
                if (c)
                {
                    b |= 0x80;
                }
                c = (input[index] & 0x01) > 0;
                input[index] = b;
            }
            if (c)
            {
                input[0] |= 0x80;
            }

            StringBuilder strBuiPassword = new StringBuilder();
            foreach (byte item in input)
            {
                strBuiPassword.Append(Convert.ToString(item, 16));
            }

            return strBuiPassword.ToString();
        }
能看懂我做了一件什么事么? --------------------编程问答-------------------- 。。。。你的心情可以理解。。。这个代码show的有点太初级。。。 --------------------编程问答--------------------
引用 5 楼 wjfwd2009 的回复:
public static string AfterMoveBit(string passwd)
  {
  byte[] input = System.Text.Encoding.UTF8.GetBytes(passwd);
  if (input == null || input.Length == 0)
  {
  return string.Empty;
  }

  bo……

 b >>= 1;
--------------------编程问答-------------------- HashSet
这是字数补丁.exe --------------------编程问答--------------------
引用 2 楼 wjfwd2009 的回复:
明显一个循环就能解决的东西你用了3个。。真不容易啊

3个循环本身没有问题 - 它们不是嵌套的循环。

不过选择SortedList不妥当,SortedList.Remove的复杂度是O(N),在循环中使用SortedList.Remove使得整个复杂度成了O(N*N)。

这里可以采用数组,选到的单元不用删除(删除意味着要挪动后面的所有单元),而是用最后一个元素进行覆盖到选中位置。 --------------------编程问答-------------------- 看lz的UserID跟StatusNote,lz也正在学习中,坛子里面的大牛们应该多多鼓励才对啊。给出更好更漂亮更优雅的算法,也是对正在学习的人们的帮助。 --------------------编程问答--------------------
引用 7 楼 jiangfling 的回复:
引用 5 楼 wjfwd2009 的回复:
public static string AfterMoveBit(string passwd)
{
byte[] input = System.Text.Encoding.UTF8.GetBytes(passwd);
if (input == null || input.Length == 0)
{
return string.Empty;……

有什么错么? --------------------编程问答-------------------- LZ的算法是不错的 有人说用了三个循环 我想楼主也完全有能力把他放在一个循环中的
因为这里1个循环式初始化 1个是显示
中间那个才是算法

提点建议:本人以为 可以用简单的数组解决问题 应该避免ArrayList SortedList 之类的东西

还有比如

sl.RemoveAt(nTemp);
这句循环100次
那你不如循环外面
sl.Clear();

算法这个东西以前比较讲究 现在电脑好了有些时候也无所谓了 能用就行

希望大家共勉 没必要这样无意义的抨击 --------------------编程问答-------------------- 不错,10 楼和 12 楼 的很中肯,呵呵,眼高手低的CSDN人很多。
咋一看,啥都会,啥都简单得很;动手编程,抓耳挠腮,漏洞百出。
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,