哈哈,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的有点太初级。。。 --------------------编程问答--------------------
b >>= 1;
--------------------编程问答-------------------- HashSet
这是字数补丁.exe --------------------编程问答--------------------
3个循环本身没有问题 - 它们不是嵌套的循环。
不过选择SortedList不妥当,SortedList.Remove的复杂度是O(N),在循环中使用SortedList.Remove使得整个复杂度成了O(N*N)。
这里可以采用数组,选到的单元不用删除(删除意味着要挪动后面的所有单元),而是用最后一个元素进行覆盖到选中位置。 --------------------编程问答-------------------- 看lz的UserID跟StatusNote,lz也正在学习中,坛子里面的大牛们应该多多鼓励才对啊。给出更好更漂亮更优雅的算法,也是对正在学习的人们的帮助。 --------------------编程问答--------------------
有什么错么? --------------------编程问答-------------------- LZ的算法是不错的 有人说用了三个循环 我想楼主也完全有能力把他放在一个循环中的
因为这里1个循环式初始化 1个是显示
中间那个才是算法
提点建议:本人以为 可以用简单的数组解决问题 应该避免ArrayList SortedList 之类的东西
还有比如
sl.RemoveAt(nTemp);
这句循环100次
那你不如循环外面
sl.Clear();
算法这个东西以前比较讲究 现在电脑好了有些时候也无所谓了 能用就行
希望大家共勉 没必要这样无意义的抨击 --------------------编程问答-------------------- 不错,10 楼和 12 楼 的很中肯,呵呵,眼高手低的CSDN人很多。
咋一看,啥都会,啥都简单得很;动手编程,抓耳挠腮,漏洞百出。
补充:.NET技术 , C#