由一个指定6位数产生的乱序6位数 把 这6个数 放到一个数组里,使用 Random rad = new Random(); 产生1-6的随机数,根据随机数去数组里的值拼接。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一楼所说肯定是有问题的。因为 要达到最优化你去用随机数进行判断那么。。各种坑。LZ需要的是一堆数字 然后查看乱序是多少个 建议LZ可以这样 这样最优不优不清楚 先满足了需求然后再优化 你看怎么样建立首先 当然会涉及到第一位是0的情况 这种就需要单独处理了。先排除这种情况进行操作 按这堆数字的位数循环 如6位那么 外层循环6次 内层循环就把当前数字与内层循环数进行对换位置 最后把这个数字放到数组里面 如此循环完毕之后就形成了一个包含同种情况的数字的数组。如此再次循环把该数组剃重 最后的数据就是你需要的。如果你觉得这个方案可行那么我们在继续讨论。不行的话就算了 代码怎么实现呢。我的js代码:var maxcount=50; //用户输入的需要生成的数量var listNumber=new Array();for(var a=0;a<6;a++){ for(var b=0;b<6&&b!=a;b++){ for(var c=0;c<6&&c!=b;c++){ for(var d=0;d<6&&d!=c;d++){ for(var e=0;e<6&&e!=d;e++){ for(var f=0;f<6&&f!=e;f++){ //id=TNum1-6 分别为用户输入的6个数字 var value=$("#TNum"+(a+1)).val()+$("#TNum"+(b+1)).val()+$("#TNum"+(c+1)).val() +$("#TNum"+(d+1)).val()+$("#TNum"+(e+1)).val()+$("#TNum"+(f+1)).val(); var isbreak=false; for(var j=0;j<listNumber.length;j++){ if(listNumber[j]==value){ isbreak=true; break; } } if(isbreak){ continue; } listNumber.push(value); i=i+1; if(i>maxcount){ if (maxcount % 5 != 0) //结束 { htmlstr += "</div>"; } document.getElementById('preview').innerHTML = htmlstr; return; } if (i % 5 == 1) //换行 { htmlstr += "<div class='tr'>"; } htmlstr += "<input name=\"TZNum\" class=\"number\" type=\"text\" maxlength=\"6\" value=\"" + value + "\" onkeyup=\"if(event.keyCode !=37 && event.keyCode != 39) value=value.replace(/\\D/g,'');\" />" if (i % 5 == 0) { htmlstr += "</div>"; } } } } } } } if (NCount % 5 != 0) //结束 { htmlstr += "</div>"; } document.getElementById('preview').innerHTML = htmlstr; 如果觉得上面的复杂了直接看下面代码:var maxcount=50; //用户输入的需要生成的数量var listNumber=new Array();for(var a=0;a<6;a++){ for(var b=0;b<6&&b!=a;b++){ for(var c=0;c<6&&c!=b;c++){ for(var d=0;d<6&&d!=c;d++){ for(var e=0;e<6&&e!=d;e++){ for(var f=0;f<6&&f!=e;f++){ var value=(a+1).toString()+(b+1).toString()+(c+1).toString()+(d+1).toString()+(e+1).toString()+(f+1).toString(); var isbreak=false; for(var j=0;j<listNumber.length;j++){ if(listNumber[j]==value){ isbreak=true; break; } } if(isbreak){ continue; } listNumber.push(value); i=i+1; if(i>maxcount){ return; } } } } } } } 首先哈。。只需要2层循环就够用了。架设输入的数是a 暂且讨论为字符的 for(int i=0;i<a.length;i++){ for(int j=0;j<a.length;j++){ //这里把 a 在i位置的数 与 a在j位置的数进行互相替换当然得重新申明一个变量接收这2个处理而不影响上面的双重循环 //把换位过后的数保存到数组}}//双重循环后就获取到一个新的数组 这里装满了 a各种位置的 数据 把这个数组在进行循环排出相同的数据 这个数组里面的就是你想要的了 其实2楼那个链接里面有具体代码 。。我是手写的 写多了怕出错 class Program { static void Main(string[] args) { string s, str = ""; List<string> Data = new List<string>(); s = Console.ReadLine(); for (int num1 = 0; num1 < 6; num1++) for (int num2 = 0; num2 < 6; num2++) { if (num2 == num1) continue; for (int num3 = 0; num3 < 6; num3++) { if ((num3 == num2) || (num3 == num1)) continue; for (int num4 = 0; num4 < 6; num4++) { if ((num4 == num3) || (num4 == num2) || (num4 ==num1)) continue; for (int num5 = 0; num5 < 6; num5++) { if ((num5 == num4) || (num5 == num3) || (num5 == num2) || (num5 == num1)) continue; for (int num6 = 0; num6 < 6; num6++) { if ((num6 == num5) || (num6 == num4) || (num6 == num3) || (num6 == num2) || (num6 == num1)) continue; str = "" + s[num1] + s[num2] + s[num3] + s[num4] + s[num5] + s[num6]; if (!Data.Contains(str)) { Data.Add(str); } } } } } } foreach (string Item in Data) Console.WriteLine(Item); Console.ReadKey(); } }似乎用递归实现简洁些。 static string getRandom(string seek) { string strRet = ""; string strSeek = new string(seek.ToCharArray().Distinct().ToArray()); Random rnd = new Random(); for (int i = 0; i < 6; i++) { string strItem = strSeek.ToCharArray()[rnd.Next(1, strSeek.ToCharArray().Length) - 1].ToString(); strRet += strItem; int intPOS; intPOS = seek.IndexOf(strItem)+1; seek = seek.Insert(intPOS, " "); seek = seek.Replace(strItem+" ", ""); strSeek = new string(seek.ToCharArray().Distinct().ToArray()); } Console.Write(strRet); return strRet; } 获得有多少个数: static int getCount(string seek) { char[] charSeek = seek.ToCharArray().Distinct().ToArray(); int ret = fact(seek.Length); for(int i=0;i<charSeek.Length;i++) { ret /= fact(seek.Length - seek.Replace(charSeek[i].ToString(), "").Length); } Console.WriteLine(ret); return ret; } static int fact(int n) { if (n < 2) return 1; else { int ret = 1; for (int i = 1; i <= n; i++) ret *= i; return ret; } } Checkbox取值问题 MVC4 + EntityFramework WCF问题 求助 DLLImport 导入函数的返回值 是自定义的类型 分全上了!GridView怎么从数据库绑定并读取数据(包含图片)? 求C#中跨行匹配的正则表达式 关于dataGridView的小小问题 如何让对话框返回一组数据? C#能从一个接口继承,创建匿名类对象吗? 在C#中如何写数据连接池,分几个步骤呀 关闭窗口的问题 WPF,添加了类库,为什么不能using C#窗体连接数据库的问题(新手求教!)
LZ需要的是一堆数字 然后查看乱序是多少个
建议LZ可以这样 这样最优不优不清楚 先满足了需求然后再优化 你看怎么样建立首先 当然会涉及到第一位是0的情况 这种就需要单独处理了。先排除这种情况进行操作 按这堆数字的位数循环 如6位那么 外层循环6次 内层循环就把当前数字与内层循环数进行对换位置
最后把这个数字放到数组里面 如此循环完毕之后就形成了一个包含同种情况的数字的数组。如此再次循环把该数组剃重 最后的数据就是你需要的。
如果你觉得这个方案可行那么我们在继续讨论。不行的话就算了
var maxcount=50; //用户输入的需要生成的数量
var listNumber=new Array();
for(var a=0;a<6;a++){
for(var b=0;b<6&&b!=a;b++){
for(var c=0;c<6&&c!=b;c++){
for(var d=0;d<6&&d!=c;d++){
for(var e=0;e<6&&e!=d;e++){
for(var f=0;f<6&&f!=e;f++){ //id=TNum1-6 分别为用户输入的6个数字
var value=$("#TNum"+(a+1)).val()+$("#TNum"+(b+1)).val()+$("#TNum"+(c+1)).val()
+$("#TNum"+(d+1)).val()+$("#TNum"+(e+1)).val()+$("#TNum"+(f+1)).val();
var isbreak=false;
for(var j=0;j<listNumber.length;j++){
if(listNumber[j]==value){
isbreak=true;
break;
}
}
if(isbreak){
continue;
}
listNumber.push(value);
i=i+1;
if(i>maxcount){
if (maxcount % 5 != 0) //结束
{
htmlstr += "</div>";
}
document.getElementById('preview').innerHTML = htmlstr;
return;
}
if (i % 5 == 1) //换行
{
htmlstr += "<div class='tr'>";
}
htmlstr += "<input name=\"TZNum\" class=\"number\" type=\"text\" maxlength=\"6\" value=\"" + value + "\" onkeyup=\"if(event.keyCode !=37 && event.keyCode != 39) value=value.replace(/\\D/g,'');\" />"
if (i % 5 == 0)
{
htmlstr += "</div>";
}
}
}
}
}
}
}
if (NCount % 5 != 0) //结束
{
htmlstr += "</div>";
}
document.getElementById('preview').innerHTML = htmlstr;
var listNumber=new Array();
for(var a=0;a<6;a++){
for(var b=0;b<6&&b!=a;b++){
for(var c=0;c<6&&c!=b;c++){
for(var d=0;d<6&&d!=c;d++){
for(var e=0;e<6&&e!=d;e++){
for(var f=0;f<6&&f!=e;f++){
var value=(a+1).toString()+(b+1).toString()+(c+1).toString()+(d+1).toString()+(e+1).toString()+(f+1).toString();
var isbreak=false;
for(var j=0;j<listNumber.length;j++){
if(listNumber[j]==value){
isbreak=true;
break;
}
}
if(isbreak){
continue;
}
listNumber.push(value);
i=i+1;
if(i>maxcount){
return;
}
}
}
}
}
}
}
for(int i=0;i<a.length;i++){
for(int j=0;j<a.length;j++){
//这里把 a 在i位置的数 与 a在j位置的数进行互相替换当然得重新申明一个变量接收这2个处理而不影响上面的双重循环
//把换位过后的数保存到数组
}
}
//双重循环后就获取到一个新的数组 这里装满了 a各种位置的 数据 把这个数组在进行循环排出相同的数据 这个数组里面的就是你想要的了
其实2楼那个链接里面有具体代码 。。我是手写的 写多了怕出错
{
static void Main(string[] args)
{
string s,
str = "";
List<string> Data = new List<string>();
s = Console.ReadLine();
for (int num1 = 0; num1 < 6; num1++)
for (int num2 = 0; num2 < 6; num2++)
{
if (num2 == num1) continue;
for (int num3 = 0; num3 < 6; num3++)
{
if ((num3 == num2) || (num3 == num1)) continue;
for (int num4 = 0; num4 < 6; num4++)
{
if ((num4 == num3) || (num4 == num2) || (num4 ==num1)) continue;
for (int num5 = 0; num5 < 6; num5++)
{
if ((num5 == num4) || (num5 == num3) || (num5 == num2) || (num5 == num1)) continue;
for (int num6 = 0; num6 < 6; num6++)
{
if ((num6 == num5) || (num6 == num4) || (num6 == num3) || (num6 == num2) || (num6 == num1)) continue;
str = "" + s[num1] + s[num2] + s[num3] + s[num4] + s[num5] + s[num6];
if (!Data.Contains(str))
{
Data.Add(str);
}
}
}
}
}
}
foreach (string Item in Data)
Console.WriteLine(Item);
Console.ReadKey();
}
}似乎用递归实现简洁些。
{
string strRet = "";
string strSeek = new string(seek.ToCharArray().Distinct().ToArray());
Random rnd = new Random();
for (int i = 0; i < 6; i++)
{
string strItem = strSeek.ToCharArray()[rnd.Next(1, strSeek.ToCharArray().Length) - 1].ToString();
strRet += strItem;
int intPOS;
intPOS = seek.IndexOf(strItem)+1;
seek = seek.Insert(intPOS, " ");
seek = seek.Replace(strItem+" ", "");
strSeek = new string(seek.ToCharArray().Distinct().ToArray());
}
Console.Write(strRet);
return strRet;
}
{
char[] charSeek = seek.ToCharArray().Distinct().ToArray();
int ret = fact(seek.Length);
for(int i=0;i<charSeek.Length;i++)
{
ret /= fact(seek.Length - seek.Replace(charSeek[i].ToString(), "").Length);
}
Console.WriteLine(ret);
return ret;
} static int fact(int n)
{
if (n < 2)
return 1;
else
{
int ret = 1;
for (int i = 1; i <= n; i++)
ret *= i;
return ret;
}
}