C# code Int64 s =NewValue(1001, 1002, 1003); private Int64 NewValue(int v1, int v2, int v3) { return Convert.ToInt64(v1.ToString() + v2.ToString() + v3.ToString()); //应为合计后数值太大所得用Int64 不过感觉不是很好最后还是用string }
MessageBox.Show(NewValue(1111, 2222, 3333)); public string NewValue(int v1, int v2, int v3) { string[] strs = new string[3]; strs[0] = v1.ToString(); strs[1] = v2.ToString(); strs[2] = v3.ToString(); string value = ""; for (int i = 0; i < strs.Length; i++) { for (int j = 0; j < strs.Length; j++) { if (i != j) { int k = 0; for (k = 0; k < strs.Length; k++) { if (k != i && k != j) break; } value += strs[i] + strs[j] + strs[k] + " "; } } } return value; }
using System; using System.Collections.Generic; using System.Text;namespace ConsoleApplication13 { class Program { static List<List<int>> Result = new List<List<int>>(); static List<int> Current; static void Main(string[] args) { List<int> A = new List<int>(new int[] { 1001 ,1002, 1003 , 8888, 1003, 1004 , }); DoIt(A, new List<int>(), 3); for (int i = 0; i < Result.Count; i++) { foreach (int j in Result[i]) Console.Write(j); Console.Write(" "); if ((i + 1) % 5 == 0) Console.WriteLine(); } Console.Read(); } static void DoIt(List<int> A, List<int> B, int Times) { if (Times == 0) { Current = B; if (!Result.Exists(IsExists)) Result.Add(new List<int>(B)); return; } for (int i = 0; i < A.Count; i++) { int Temp = A[i]; A.RemoveAt(i); B.Add(Temp); DoIt(A, B, Times - 1); A.Insert(i, Temp); B.Remove(Temp); } } static bool IsExists(List<int> R) { foreach (int I in R) if (!Current.Contains(I)) return false; return true; } } }
把18楼的稍微改成这样应该可以吧,听说还有sql算法的 public string NewValue() { string[][] strs = new string[][]{{1001,1002,1003},{1002,1003,1004},{1003,1004,1005},{1004,1005,1006}}; string value = ""; for (int i = 0; i < strs.Length; i++) { for (int j = 0; j < strs.Length; j++) { if (i != j) { int k = 0; for (k = 0; k < strs.Length; k++) { if (k != i && k != j) break; } value += strs[i] + strs[j] + strs[k] + " "; } } } return value; }
用.net算法或sql算法实现
private Int64 NewValue(int v1, int v2, int v3)
{
return Convert.ToInt64(v1.ToString() + v2.ToString() + v3.ToString());
//应为合计后数值太大所得用Int64 不过感觉不是很好最后还是用string
}
我举的例子是个数组,好像可以用for或foreach 最后组成12个字符的数字有多少个 还有sql的算法怎么用
这样用sql应该不能实现吧,至少我实现不了。在一次确定你要的东西。
比如1234
就要转换成
1243
1324
1342
1432
1423
2134
2143
等东西吗
private Int64 NewValue(int v1, int v2, int v3)
{
return Convert.ToInt64(v1.ToString() + v2.ToString() + v3.ToString());
//应为合计后数值太大所得用Int64 不过感觉不是很好最后还是用string
}
{
string[] strs = new string[3];
strs[0] = v1.ToString();
strs[1] = v2.ToString();
strs[2] = v3.ToString();
string value = "";
for (int i = 0; i < strs.Length; i++)
{
for (int j = 0; j < strs.Length; j++)
{
if (i != j)
{
int k = 0;
for (k = 0; k < strs.Length; k++)
{
if (k != i && k != j)
break;
}
value += strs[i] + strs[j] + strs[k] + " ";
}
}
} return value;
}
using System.Collections.Generic;
using System.Text;namespace ConsoleApplication13
{
class Program
{ static List<List<int>> Result = new List<List<int>>();
static List<int> Current; static void Main(string[] args)
{
List<int> A = new List<int>(new int[]
{
1001 ,1002, 1003 ,
8888, 1003, 1004 ,
}); DoIt(A, new List<int>(), 3); for (int i = 0; i < Result.Count; i++)
{
foreach (int j in Result[i])
Console.Write(j);
Console.Write(" ");
if ((i + 1) % 5 == 0)
Console.WriteLine();
}
Console.Read();
} static void DoIt(List<int> A, List<int> B, int Times)
{
if (Times == 0)
{
Current = B;
if (!Result.Exists(IsExists))
Result.Add(new List<int>(B));
return;
} for (int i = 0; i < A.Count; i++)
{
int Temp = A[i];
A.RemoveAt(i);
B.Add(Temp);
DoIt(A, B, Times - 1);
A.Insert(i, Temp);
B.Remove(Temp);
}
} static bool IsExists(List<int> R)
{
foreach (int I in R)
if (!Current.Contains(I))
return false;
return true;
}
}
}
把18楼的稍微改成这样应该可以吧,听说还有sql算法的
public string NewValue()
{
string[][] strs = new string[][]{{1001,1002,1003},{1002,1003,1004},{1003,1004,1005},{1004,1005,1006}};
string value = "";
for (int i = 0; i < strs.Length; i++)
{
for (int j = 0; j < strs.Length; j++)
{
if (i != j)
{
int k = 0;
for (k = 0; k < strs.Length; k++)
{
if (k != i && k != j)
break;
}
value += strs[i] + strs[j] + strs[k] + " ";
}
}
} return value;
}