1。有1,2,2,3,4,5六个数,要求输出他们组合的全排列,4不能在第三位,5和3不能相邻
2。考勤表id(PK int) name(varchar) time(datetime),求迟到次数最多的员工的最后一次迟到时间
看到一个帖子上的面试题 我是真算不出了
麻烦高手帮忙讲讲
2。考勤表id(PK int) name(varchar) time(datetime),求迟到次数最多的员工的最后一次迟到时间
看到一个帖子上的面试题 我是真算不出了
麻烦高手帮忙讲讲
那个排列的真麻烦
先不用加条件 就把所有可能出现的排序写出来就ok
// 当前固定部分
private String CurFixPart;
private String PreGenNum;
public static void main(String[] args) {
Test3 t = new Test3();
t.GenControll("123456");
}
// 调整字符串s位置pos字符到最前
private String shift(String s, int pos) {
String newStr;
if (s.length() > pos + 1)
newStr = s.substring(pos, pos + 1) + s.substring(0, pos)
+ s.substring(pos + 1);
else
newStr = s.substring(pos) + s.substring(0, pos);
return newStr;
}
private int Validate(String newNum) {
String newGenNum = CurFixPart + newNum;
if (Integer.valueOf(newGenNum) <= Integer.valueOf(PreGenNum))
return 0;
if (newGenNum.substring(2, 3).equals("4")
|| (newGenNum.indexOf("35") != -1)
|| (newGenNum.indexOf("53") != -1))
return 0;
PreGenNum = newGenNum;
System.out.println("----"+newGenNum);
return 0;
}
public void GenControll(String Base) {
PreGenNum = "0";
CurFixPart = "";
GenNext(Base, 0);
}
public void GenNext(String varPart, int curPos) {
if (varPart.length() == 2) {
Validate(varPart);
Validate(shift(varPart, 1));
return;
}
// Next Layer
String newGen = shift(varPart, curPos);
String SavedFixPart = CurFixPart;
CurFixPart = CurFixPart + newGen.substring(0, 1);
GenNext(newGen.substring(1), 0);
CurFixPart = SavedFixPart;
// 同层递增
if (curPos == varPart.length() - 1)
return;
GenNext(varPart, curPos + 1);
}
remove.compareto("4")
select top 1 time from test where name =
(select top 1 name from test group by name order by count(*) desc)
order by time desc
from test
where name in(select name
from test
group by name
having count(time)>=all(select count(time)
from test
group by name))
order by time desc
Sub Main() Dim d As New List(Of String)
Dim num() As Integer = {1, 2, 2, 3, 4, 5}
For i1 = 0 To 5
For i2 = 0 To 5
If i2 = i1 Then Continue For
If num(i2) = 5 And num(i1) = 3 Then Continue For
If num(i2) = 3 And num(i1) = 1 Then Continue For
For i3 = 0 To 5
If i3 = i1 OrElse i3 = i2 Then Continue For
If num(i3) = 4 Then Continue For
If num(i3) = 5 And num(i2) = 3 Then Continue For
If num(i3) = 3 And num(i2) = 5 Then Continue For
For i4 = 0 To 5
If i4 = i1 OrElse i4 = i2 OrElse i4 = i3 Then Continue For
If num(i4) = 5 And num(i3) = 3 Then Continue For
If num(i4) = 3 And num(i3) = 5 Then Continue For
For i5 = 0 To 5
If i5 = i1 OrElse i5 = i2 OrElse i5 = i3 OrElse i5 = i4 Then Continue For
If num(i5) = 5 And num(i4) = 3 Then Continue For
If num(i5) = 3 And num(i4) = 5 Then Continue For
For i6 = 0 To 5
If i6 = i1 OrElse i6 = i2 OrElse i6 = i3 OrElse i6 = i4 OrElse i6 = i5 Then Continue For
If num(i6) = 5 And num(i5) = 3 Then Continue For
If num(i6) = 3 And num(i5) = 5 Then Continue For
Console.WriteLine(String.Format("{0}-{1}-{2}-{3}-{4}-{5}", num(i1), num(i2), num(i3), num(i4), num(i5), num(i6))) Next
Next
Next
Next
Next
Next End Sub
Dim num() As Integer = {1, 2, 2, 3, 4, 5}
For i1 = 0 To 5
For i2 = 0 To 5
If i2 = i1 Then Continue For
For i3 = 0 To 5
If i3 = i1 OrElse i3 = i2 Then Continue For
For i4 = 0 To 5
If i4 = i1 OrElse i4 = i2 OrElse i4 = i3 Then Continue For
For i5 = 0 To 5
If i5 = i1 OrElse i5 = i2 OrElse i5 = i3 OrElse i5 = i4 Then Continue For
For i6 = 0 To 5
If i6 = i1 OrElse i6 = i2 OrElse i6 = i3 OrElse i6 = i4 OrElse i6 = i5 Then Continue For d.Add(String.Format("{0}-{1}-{2}-{3}-{4}-{5}", num(i1), num(i2), num(i3), num(i4), num(i5), num(i6))) Next
Next
Next
Next
Next
Next d.AsParallel.Where(Function(s) s(7) <> "4"c And s.IndexOf("3-5") = -1 And s.IndexOf("5-3") = -1).ForAll(Sub(s)
Console.WriteLine(s)
End Sub)
End Sub