你的第二个题是: public class Sum { public static void main(String [] argv) { int a=11; int b=4; a=a+b; b=a-b; a=a-b; } }
public class Ab{ public static void main(String[] args){ int a=11; int b=4; System.out.println("a:"+a+"\nb:"+b); a=a+b; b=a-b; a=a-b; System.out.println("互换后为:"); System.out.println("a:"+a+"\nb:"+b); } }
2题: a = a + b ; b = a - b ; a = a - b ;
前面的第2题怎么都一个样,我给个: public static void main(String[] args) throws IOException{ int a = 11; int b = 8; a = a^b; b=a^b; a=a^b; System.out.println(a); System.out.println(b); }
public static void aTest(){ char[] number = {'1','2','2','3','4','5'}; char[] num = new char[number.length]; int size =0; size = testArrange(number,num,0); System.out.println("size="+size); }
第二題 class t { public static void main(String[] args) { int a=11; int b=4; a=~a & 0x0f; b=~b & 0x0f; System.out.println("a="+a); System.out.println("b="+b); } }
package exchange;public class Exchange { /** * 答案总结 */ public static void main(String[] args) { //int a=-1234567890,b=987654321; int a=11; int b=4;
// a=b|a&~(b=a);
// a=b|(b=a)&0;
// a^=b^(b^=a^b);//有0的情况下就错了
// a=a+b; // b=a-b; // a=a-b;
// a=a+b-(b=a);
// a=a-b; // b=a+b; // a=b-a;
// a=b-(b=a)+a; // b=a+(a=b)*0;//这个最好
System.out.println("a:"+a+" b:"+b); }}
import java.util.Vector; public class ListSort { private static int cnt = 0; public ListSort() { } public static void main(String args[]) throws Exception { Vector list = new Vector(); list.add("1"); list.add("2"); list.add("2"); list.add("3"); list.add("4"); list.add("5"); sortlist( list,new Vector()); System.out.println(cnt); System.out.println("there has two 2 ,every number will be repeated 2 times.so the last result = 396/2=198"); } private static void sortlist(Vector oldV, Vector newV) throws Exception { if (newV.size() == 6) { if(newV.get(2).toString().equalsIgnoreCase("4")){ return; } String s=""; for(int j=0;j<newV.size(); j++){ s=s+newV.get(j).toString(); } if (s.indexOf("51")!=-1 || s.indexOf("15")!=-1 ) { return; } System.out.println(s); cnt++; return; } for (int i = 0; i < oldV.size(); i++) { Vector old2V = new Vector(); Vector new2V=new Vector(); for(int j=0;j<oldV.size(); j++){ old2V.add(oldV.get(j)); } for(int j=0;j<newV.size(); j++){ new2V.add(newV.get(j)); } new2V.add(old2V.get(i)); old2V.remove(i); sortlist(old2V, new2V); } } }
public class Sum
{
public static void main(String [] argv)
{
int a=11;
int b=4;
a=a+b;
b=a-b;
a=a-b;
}
}
public static void main(String[] args){
int a=11;
int b=4;
System.out.println("a:"+a+"\nb:"+b);
a=a+b;
b=a-b;
a=a-b;
System.out.println("互换后为:");
System.out.println("a:"+a+"\nb:"+b);
}
}
a = a + b ;
b = a - b ;
a = a - b ;
public static void main(String[] args) throws IOException{
int a = 11;
int b = 8;
a = a^b;
b=a^b;
a=a^b;
System.out.println(a);
System.out.println(b);
}
b=a^b;
a=a^b;
package awu.com;public class C {
public static void main(String []args)
{
int a[]={1,2,2,4,5,6};
int i,j,k,l,m,n;
int count = 0;
for(i=0;i<a.length;i++)
{
for(j=0;j<a.length;j++)
{
for(k=0;k<a.length;k++)
{
for(l=0;l<a.length;l++)
{
for(m=0;m<a.length;m++)
{
for(n=0;n<a.length;n++)
{
if( a[k] ==4 || a[i]==1&&a[j]==5 || a[j]==1&&a[k]==5|| a[k]==1&&a[l]==5|| a[l]==1&&a[m]==5|| a[m]==1&&a[n]==5)
{
continue;
}
else
{
count++;
System.out.println(a[i]+""+a[j]+""+a[k]+""+a[l]+""+a[m]+""+a[n]);
}
}
}
}
}
}
}
System.out.println(count);
}
}
public static void main(String []args)
{
int a[]={1,2,2,4,5,6};
int i,j,k,l,m,n;
int count = 0;
for(i=0;i<a.length;i++)
{
for(j=0;j<a.length;j++)
{
for(k=0;k<a.length;k++)
{
for(l=0;l<a.length;l++)
{
for(m=0;m<a.length;m++)
{
for(n=0;n<a.length;n++)
{
if( a[k] ==4 || //第三们不能为4
a[i]==1 && a[j]==5 || //一二位不能15
a[j]==1 && a[k]==5 || //二三位不能15
a[k]==1 && a[l]==5 || //三四位不能15
a[l]==1 && a[m]==5 || //四五位不能15
a[m]==1 && a[n]==5) //五六位不能15
{continue; }
else
{ count++; //计数
System.out.println(a[i]+""+a[j]+""+a[k]+""+a[l]+""+a[m]+""+a[n]);}//打印这些可能的数
}
}
}
}
}
}
System.out.println(count);
}
}
好像不对吧
你的算法里面没有去掉数字重复的
例如:111111……
&& j!=k && j!=l && j!=m &&j!=n
&& k!=l && k!=m && k!=n
&& l!=m && l!=n
&& m!=n)在最里边的循环加上这个条件,可是结果是498啊,帮忙看看哪个数字不要求的
a[i]==1 && a[j]==5 || //一二位不能15
a[j]==1 && a[k]==5 || //二三位不能15
a[k]==1 && a[l]==5 || //三四位不能15
a[l]==1 && a[m]==5 || //四五位不能15
a[m]==1 && a[n]==5把1,5换位置再加进去
a[i]==1 && a[j]==5 ||
a[j]==1 && a[k]==5 ||
a[k]==1 && a[l]==5 ||
a[l]==1 && a[m]==5 ||
a[m]==1 && a[n]==5 ||
a[i]==5 && a[j]==1 ||
a[j]==5 && a[k]==1 ||
a[k]==5 && a[l]==1 ||
a[l]==5 && a[m]==1 ||
a[m]==5 && a[n]==1有没有办法简化一下呢?
1,2,2,3,4,5 i
1,2,2,3,4,5 j
1,2,2,3,4,5 k
1,2,2,3,4,5 l
1,2,2,3,4,5 m
1,2,2,3,4,5 n
从每次从一个组里取一个数出来,这样就能组成六位了,而且保证全是里边的数
也应该注意位置问题,第一组的放在第一位,第二组的放在第二位........
然后就确定条件,首先第一与第二位不能都取相同位置上的数,第一与第三也是一样,所以就有了这样的条件
i!=j && i!=k && i!=l&& i!=m && i!=n
&& j!=k && j!=l && j!=m &&j!=n
&& k!=l && k!=m && k!=n
&& l!=m && l!=n
&& m!=n
然后就是第三位也就是k位不能是4所以有a[k] !=4
1,2位不能是5,所以a[i]a[j]不能是15.
以此类推...
if( a[k] ==4 ||
a[i]*a[j]==5 ||
a[j]*a[k]==5 ||
a[k]*a[l]==5 ||
a[l]*a[m]==5 ||
a[m]*a[n]==5
)
b=a+(a=b)*0 测试的运行结果是占11个字节
而
a = a^b;
b=a^b;
a=a^b; 测试的运行结果是占13个字节
csdn上有人测试过的,以前也出现过
class aa{
public static void main(String args[])
{
int a,b;
a=10;
b=8;
System.out.println("交换之前的a与b是:"+a+","+b);
b=a+(a=b)*0; //a与b的交换
System.out.println("交换之后的a与b是:"+a+","+b);
}
运行答案是:交换之前的a与b是:10,8
交换之前的a与b是:8,10
{
private static int ans =0;
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
Perm(new int[]{1,2,2,3,4,5},0,5);
Console.WriteLine(ans.ToString());
} private static void Perm(int[] list,int k,int m)
{
if(k==m)
{
if(list[2] != 4)
{
ans ++;
for(int i=0;i<=m;i++)
Console.Write(list[i].ToString());
Console.Write("\t");
}
}
else
{
for(int i = k;i<=m;i++)
if(NoRepeat(list,k,i))
{
Swap(list,k,i);
Perm(list,k+1,m);
Swap(list,k,i);
}
}
} private static void Swap( int[] list,int k,int i)
{
int temp = list[k];
list[k] = list[i];
list[i] = temp;
} private static bool NoRepeat(int[] list,int k,int i)
{
if(i>k)
for(int t = k;t<i;t++)
{
if(list[t] == list[i])
return false;
}
return true;
} }
public class Sum
{
public static void main(String [] argv)
{
int a=11;
int b=4;
a=a+b;
b=a-b;
a=a-b;
}
}
英雄所见略同
{
if(k==m)
{
if(list[2] != 4)
{
ans ++;
for(int i=0;i<=m;i++)
Console.Write(list[i].ToString());
Console.Write("\t");
}
}
else
{
for(int i = k;i<=m;i++)
if(NoRepeat(list,k,i))
{
Swap(list,k,i);
Perm(list,k+1,m);
Swap(list,k,i);
}
}
}//交换
private static void Swap( int[] list,int k,int i)
{
int temp = list[k];
list[k] = list[i];
list[i] = temp;
}
//判断重复项
private static bool NoRepeat(int[] list,int k,int i)
{
if(i>k)
for(int t = k;t<i;t++)
{
if(list[t] == list[i])
return false;
}
return true;
}
2: 1 2 2 3 5 4
3: 1 2 2 4 3 5
4: 1 2 2 4 5 3
5: 1 2 2 5 3 4
6: 1 2 2 5 4 3
7: 1 2 3 2 4 5
8: 1 2 3 2 5 4
9: 1 2 3 4 2 5
10: 1 2 3 4 5 2
11: 1 2 3 5 2 4
12: 1 2 3 5 4 2
13: 1 2 5 2 3 4
14: 1 2 5 2 4 3
15: 1 2 5 3 2 4
16: 1 2 5 3 4 2
17: 1 2 5 4 2 3
18: 1 2 5 4 3 2
19: 1 3 2 2 4 5
20: 1 3 2 2 5 4
21: 1 3 2 4 2 5
22: 1 3 2 4 5 2
23: 1 3 2 5 2 4
24: 1 3 2 5 4 2
25: 1 3 5 2 2 4
26: 1 3 5 2 4 2
27: 1 3 5 4 2 2
28: 1 4 2 2 3 5
29: 1 4 2 2 5 3
30: 1 4 2 3 2 5
31: 1 4 2 3 5 2
32: 1 4 2 5 2 3
33: 1 4 2 5 3 2
34: 1 4 3 2 2 5
35: 1 4 3 2 5 2
36: 1 4 3 5 2 2
37: 1 4 5 2 2 3
38: 1 4 5 2 3 2
39: 1 4 5 3 2 2
40: 2 1 2 3 4 5
41: 2 1 2 3 5 4
42: 2 1 2 4 3 5
43: 2 1 2 4 5 3
44: 2 1 2 5 3 4
45: 2 1 2 5 4 3
46: 2 1 3 2 4 5
47: 2 1 3 2 5 4
48: 2 1 3 4 2 5
49: 2 1 3 4 5 2
50: 2 1 3 5 2 4
51: 2 1 3 5 4 2
52: 2 2 1 3 4 5
53: 2 2 1 3 5 4
54: 2 2 1 4 3 5
55: 2 2 1 4 5 3
56: 2 2 3 1 4 5
57: 2 2 3 5 4 1
58: 2 2 5 3 1 4
59: 2 2 5 3 4 1
60: 2 2 5 4 1 3
61: 2 2 5 4 3 1
62: 2 3 1 2 4 5
63: 2 3 1 2 5 4
64: 2 3 1 4 2 5
65: 2 3 1 4 5 2
66: 2 3 2 1 4 5
67: 2 3 2 5 4 1
68: 2 3 5 2 1 4
69: 2 3 5 2 4 1
70: 2 3 5 4 1 2
71: 2 3 5 4 2 1
72: 2 4 1 2 3 5
73: 2 4 1 2 5 3
74: 2 4 1 3 2 5
75: 2 4 1 3 5 2
76: 2 4 2 1 3 5
77: 2 4 2 5 3 1
78: 2 4 3 1 2 5
79: 2 4 3 5 2 1
80: 2 4 5 2 1 3
81: 2 4 5 2 3 1
82: 2 4 5 3 1 2
83: 2 4 5 3 2 1
84: 2 5 2 1 3 4
85: 2 5 2 1 4 3
86: 2 5 2 3 1 4
87: 2 5 2 3 4 1
88: 2 5 2 4 1 3
89: 2 5 2 4 3 1
90: 2 5 3 1 2 4
91: 2 5 3 1 4 2
92: 2 5 3 2 1 4
93: 2 5 3 2 4 1
94: 2 5 3 4 1 2
95: 2 5 3 4 2 1
96: 3 1 2 2 4 5
97: 3 1 2 2 5 4
98: 3 1 2 4 2 5
99: 3 1 2 4 5 2
100: 3 1 2 5 2 4
101: 3 1 2 5 4 2
102: 3 2 1 2 4 5
103: 3 2 1 2 5 4
104: 3 2 1 4 2 5
105: 3 2 1 4 5 2
106: 3 2 2 1 4 5
107: 3 2 2 5 4 1
108: 3 2 5 2 1 4
109: 3 2 5 2 4 1
110: 3 2 5 4 1 2
111: 3 2 5 4 2 1
112: 3 4 1 2 2 5
113: 3 4 1 2 5 2
114: 3 4 2 1 2 5
115: 3 4 2 5 2 1
116: 3 4 5 2 1 2
117: 3 4 5 2 2 1
118: 3 5 2 1 2 4
119: 3 5 2 1 4 2
120: 3 5 2 2 1 4
121: 3 5 2 2 4 1
122: 3 5 2 4 1 2
123: 3 5 2 4 2 1
124: 4 1 2 2 3 5
125: 4 1 2 2 5 3
126: 4 1 2 3 2 5
127: 4 1 2 3 5 2
128: 4 1 2 5 2 3
129: 4 1 2 5 3 2
130: 4 1 3 2 2 5
131: 4 1 3 2 5 2
132: 4 1 3 5 2 2
133: 4 2 1 2 3 5
134: 4 2 1 2 5 3
135: 4 2 1 3 2 5
136: 4 2 1 3 5 2
137: 4 2 2 1 3 5
138: 4 2 2 5 3 1
139: 4 2 3 1 2 5
140: 4 2 3 5 2 1
141: 4 2 5 2 1 3
142: 4 2 5 2 3 1
143: 4 2 5 3 1 2
144: 4 2 5 3 2 1
145: 4 3 1 2 2 5
146: 4 3 1 2 5 2
147: 4 3 2 1 2 5
148: 4 3 2 5 2 1
149: 4 3 5 2 1 2
150: 4 3 5 2 2 1
151: 4 5 2 1 2 3
152: 4 5 2 1 3 2
153: 4 5 2 2 1 3
154: 4 5 2 2 3 1
155: 4 5 2 3 1 2
156: 4 5 2 3 2 1
157: 4 5 3 1 2 2
158: 4 5 3 2 1 2
159: 4 5 3 2 2 1
160: 5 2 1 2 3 4
161: 5 2 1 2 4 3
162: 5 2 1 3 2 4
163: 5 2 1 3 4 2
164: 5 2 1 4 2 3
165: 5 2 1 4 3 2
166: 5 2 2 1 3 4
167: 5 2 2 1 4 3
168: 5 2 2 3 1 4
169: 5 2 2 3 4 1
170: 5 2 2 4 1 3
171: 5 2 2 4 3 1
172: 5 2 3 1 2 4
173: 5 2 3 1 4 2
174: 5 2 3 2 1 4
175: 5 2 3 2 4 1
176: 5 2 3 4 1 2
177: 5 2 3 4 2 1
178: 5 3 1 2 2 4
179: 5 3 1 2 4 2
180: 5 3 1 4 2 2
181: 5 3 2 1 2 4
182: 5 3 2 1 4 2
183: 5 3 2 2 1 4
184: 5 3 2 2 4 1
185: 5 3 2 4 1 2
186: 5 3 2 4 2 1
187: 5 4 1 2 2 3
188: 5 4 1 2 3 2
189: 5 4 1 3 2 2
190: 5 4 2 1 2 3
191: 5 4 2 1 3 2
192: 5 4 2 2 1 3
193: 5 4 2 2 3 1
194: 5 4 2 3 1 2
195: 5 4 2 3 2 1
196: 5 4 3 1 2 2
197: 5 4 3 2 1 2
198: 5 4 3 2 2 1
Numbers:6 Sums:198 Times:47ms
具体做法是按离散数学里的字典序不符合需求的去掉.
*
* 题目:1.用1,2,2,3,4,5,这六个数字,用java写一个main函数,
* 打印出所有不同的排列,如:512234,412345等,
* 要求:“4”不能排第3位,“1”与“5”不能相连。
*
* 思想:
* 把122345变为123456,求123456的排列组合,几个数字排成的行,每行不相同且每行都不存在相同的数字
* 再按条件排除值就行了!
*
* "4"不能排第3位:相当于"5"不能在第3"
* "1"与"5"不能相连:相当于"1"与"6"不能相连
* 还有一个重要的条件:就是有两个2,如果按照排列组合的话就会出现重复,必须排除掉,
* 在出现3的同时又出现2就排除该组合就行了
*
* @author Andnnl
*
*/
public class Num122345 {
private static int sum = 0; private static final int numbers = 6;// /**
* 递归运算 一级一级向下判断,最高级为numbers,最后一级为0, 每向下一级都会用record数组来保存当前级的数字
* 经过判断,到最后一级时,就打印该行
*
* @param time
* 当前循环的是第几次(numbers~0,为0时已经是递归到最后一级)
* @param record
* 保存每一次的值,传到下一级去判断(length=numbers)
*/
public static void calculate(int time, int[] record) {
/*
* 判断是否存在相同的数字,(numbers - 1 - time)为record当前的值的索引号
* 由当前索引号的值跟索引号前面的值比较,如果存在相同的值就退出,进行下一次递归
*/
if (isExistSame(record, (numbers - 1 - time)))
return; /*
* 当前级数为0就打印该行,并累加总记录数
*/
if (time == 0) {
sum++;
print(record);
return;
} /*
* 当前级的值的设置
*/
for (int i = 0; i < numbers; i++) {
record[numbers - time] = i + 1;
calculate(time - 1, record);
} } /**
* 判断是否存在相同的数字
*
* @param record
* @param t 当前索引号
* @return
*/
public static boolean isExistSame(int[] record, int t) {
// "4"不能排第3位:相当于"5"不能在第3"
if(t==2 && record[t]==5){
return true;
}
for (int i = 0; i < t; i++) {
//"1"与"5"不能相连:相当于"1"与"6"不能相连
if((record[i]==1&&record[i+1]==6)||(record[i]==6&&record[i+1]==1))
return true;
//3的同时又出现2就排除该组合,把出现重复的值排除掉
if((record[i]==2&&record[t]==3))
return true;
//排列组合,不能存在相同的值
if ((record[t] == record[i]) )
return true;
}
return false;
} /**
* 打印行
*
* @param record
*/
public static void print(int[] record) {
String s = "";
for (int i = 0; i <= numbers - 1; i++) {
s += "" +
"\t" + (record[i]>=3?record[i]-1:record[i]);
// s += "\t" + record[i];
} System.out.println(sum + ":" + s); } public static void main(String[] args) {
int[] record = new int[numbers];// 保存当前级的数字
long startTime = System.currentTimeMillis();
// 进入递归
calculate(numbers, record); long endTime = System.currentTimeMillis();
long passTime = endTime - startTime; System.out.println("Numbers:" + numbers + "\tSums:" + sum + "\tTimes:"
+ passTime + "ms"); }
}
public class ATest { private static boolean isLink(char a,char b){
if(a=='1' && b=='5')return true;
if(a=='5' && b=='1')return true;
return false;
}
private static int num2(char[] num,int index){
int n=0;
for(int i=0;i<index;i++){
if(num[i]=='2')n++;
}
return n;
}
private static boolean sameNumber(char[] num,int index,char a){
for(int i=0;i<index;i++){
if(num[i]==a)return true;
}
return false;
}
public static int testArrange(char[] number,char[] num,int index){
int size = 0;//组合的个数
int pos1=1,pos2=2;//该变量为重复的2的数组位置,可以提取出来作为参数
int emp = num2(num,index);//得到当前的数组中有几个2
for(int i=0;i<num.length;i++){
if(number[i]=='2'){//当前的数字为2
if(emp >= 2){//数组中2的个数多于2个
continue;
}else if(emp == 1){//数组中有一个2时,要求当前的2不能为位置1的2
if(i==pos1)continue;
}else{
if(i==pos2)continue;//数组中没有2时,要求当前的2不能为位置2的2
}
}else{
if(index==2 && number[i]=='4')continue;//去除4
if(index>0 && isLink(num[index-1],number[i]))continue;//去除相邻的1和5
if(sameNumber(num,index,number[i]))continue;//去除重复数字
}
num[index] = number[i];
if(index==5){
System.out.println(num);
size++;
}else{
size = size + testArrange(number,num,index+1);
}
}
return size;
}
public static void aTest(){
char[] number = {'1','2','2','3','4','5'};
char[] num = new char[number.length];
int size =0;
size = testArrange(number,num,0);
System.out.println("size="+size);
}
public static void main(String[] args) {
aTest();
}}
122345
122354
122435
122453
122534
122543
123245
123254
123425
123452
123524
123542
125234
125243
125324
125342
125423
125432
132245
132254
132425
132452
132524
132542
135224
135242
135422
142235
142253
142325
142352
142523
142532
143225
143252
143522
145223
145232
145322
212345
212354
212435
212453
212534
212543
213245
213254
213425
213452
213524
213542
221345
221354
221435
221453
223145
223541
225314
225341
225413
225431
231245
231254
231425
231452
232145
232541
235214
235241
235412
235421
241235
241253
241325
241352
242135
242531
243125
243521
245213
245231
245312
245321
252134
252143
252314
252341
252413
252431
253124
253142
253214
253241
253412
253421
312245
312254
312425
312452
312524
312542
321245
321254
321425
321452
322145
322541
325214
325241
325412
325421
341225
341252
342125
342521
345212
345221
352124
352142
352214
352241
352412
352421
412235
412253
412325
412352
412523
412532
413225
413252
413522
421235
421253
421325
421352
422135
422531
423125
423521
425213
425231
425312
425321
431225
431252
432125
432521
435212
435221
452123
452132
452213
452231
452312
452321
453122
453212
453221
521234
521243
521324
521342
521423
521432
522134
522143
522314
522341
522413
522431
523124
523142
523214
523241
523412
523421
531224
531242
531422
532124
532142
532214
532241
532412
532421
541223
541232
541322
542123
542132
542213
542231
542312
542321
543122
543212
543221
size=198
Perm()是递归函数 初始化调用Perm(new int[]{1,2,2,3,4,5},0,5)就ok了private static void Perm(int[] list,int k,int m)
{
if(k==m)
{
//剔除1和5相连的
for(int i = 0;i<=m;i++)
{
if(i!=m&&i!=0)
{
if(list[i]==1&&list[i+1]==5)
return;
if(list[i]==1&&list[i-1]==5)
return;
}
else if(i==0)
{
if(list[i]==1&&list[i+1]==5)
return;
}
else if(i==m)
{
if(list[i]==1&&list[i-1]==5)
return;
}
} if(list[2] != 4)
{
ans ++;
for(int i=0;i<=m;i++)
Console.Write(list[i].ToString());
Console.Write("\t");
}
}
else
{
for(int i = k;i<=m;i++)
if(NoRepeat(list,k,i))
{
Swap(list,k,i);
Perm(list,k+1,m);
Swap(list,k,i);
}
}
}//交换
private static void Swap( int[] list,int k,int i)
{
int temp = list[k];
list[k] = list[i];
list[i] = temp;
}
//判断重复项
private static bool NoRepeat(int[] list,int k,int i)
{
if(i>k)
for(int t = k;t<i;t++)
{
if(list[t] == list[i])
return false;
}
return true;
}
class t
{
public static void main(String[] args)
{
int a=11;
int b=4;
a=~a & 0x0f;
b=~b & 0x0f;
System.out.println("a="+a);
System.out.println("b="+b);
}
}
* 答案总结
*/
public static void main(String[] args) {
//int a=-1234567890,b=987654321;
int a=11;
int b=4;
// a=b|a&~(b=a);
// a=b|(b=a)&0;
// a^=b^(b^=a^b);//有0的情况下就错了
// a=a+b;
// b=a-b;
// a=a-b;
// a=a+b-(b=a);
// a=a-b;
// b=a+b;
// a=b-a;
// a=b-(b=a)+a;
// b=a+(a=b)*0;//这个最好
System.out.println("a:"+a+" b:"+b);
}}
public class ListSort
{
private static int cnt = 0;
public ListSort()
{
} public static void main(String args[]) throws Exception
{
Vector list = new Vector();
list.add("1");
list.add("2");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
sortlist( list,new Vector());
System.out.println(cnt);
System.out.println("there has two 2 ,every number will be repeated 2 times.so the last result = 396/2=198");
} private static void sortlist(Vector oldV, Vector newV) throws Exception
{
if (newV.size() == 6)
{
if(newV.get(2).toString().equalsIgnoreCase("4")){
return;
}
String s="";
for(int j=0;j<newV.size(); j++){
s=s+newV.get(j).toString();
}
if (s.indexOf("51")!=-1 || s.indexOf("15")!=-1 )
{
return;
}
System.out.println(s);
cnt++;
return;
}
for (int i = 0; i < oldV.size(); i++)
{
Vector old2V = new Vector();
Vector new2V=new Vector();
for(int j=0;j<oldV.size(); j++){
old2V.add(oldV.get(j));
}
for(int j=0;j<newV.size(); j++){
new2V.add(newV.get(j));
}
new2V.add(old2V.get(i));
old2V.remove(i);
sortlist(old2V, new2V);
}
}
}
{
public static void main(String[] args)
{
int[] a={1,2,2,3,4,5};
String text="";
String temp="";
for(int i=0;i<6;i++){
for(int j=0;j<6;j++){
if(i==j){
continue;
}
for(int k=0;k<6;k++){
if(i==k || j==k || k==4){
continue;
}
for(int m=0;m<6;m++){
if(i==m || j==m || k==m){
continue;
}
for(int n=0;n<6;n++){
if(i==n || j==n || k==n || m==n){
continue;
}
for(int p=0;p<6;p++){
if(i==p || j==p || k==p || m==p || n==p){
continue;
}
text = "" + a[i] + a[j] + a[k] + a[m] + a[n] + a[p];
if(text.indexOf("15") !=-1 || text.indexOf("51") !=-1){
continue;
}
if(temp.indexOf(text)==-1){
System.out.println(text);
}
}
}
}
}
}
}
}
}
public class Test { String token[] = { "1", "2", "2", "3", "4", "5" };
int outQueue[] = { 0, 0, 0, 0, 0, 0 };
boolean isSet[] = { false, false, false, false, false, false }; void SetOut(int pre, int pos) {
if (pos >= outQueue.length) { // 輸出字串
for (int i = 0; i < outQueue.length; i++)
System.out.print(token[outQueue[i]]);
System.out.println();
return;
} for (int i = 0; i < token.length; i++) {
if (isSet[i] == true) // 略過己設定字元
continue;
if (pos == 2 && i == 4) // 「4」不能排第3位
continue;
if (pre == 0 && i == 5) // 「1」與「5」不能相連
continue;
if (pre == 5 && i == 0) // 「5」與「1」不能相連
continue;
if (i == 2 && isSet[1]) // 「2」與「2」重覆剔除
continue;
outQueue[pos] = i;
isSet[i] = true; // lock
SetOut(i, pos + 1); // 設定下一個字元
isSet[i] = false; // unlock
}
} public static void main(String args[]) {
new Test().SetOut(-1, 0);
}
}
{
var str='';
var num=0;
for(var a1=1;a1<6;a1++)
{
for(var a2=1;a2<6;a2++)
{
if(a1==1 && a2==5){continue;}
if(a1==5 && a2==1){continue ;}
for(var a3=1;a3<6;a3++)
{//alert('111');
if(a2==1 && a3==5){continue;}
if(a2==5 && a3==1){continue;}
if(a3==4){continue;}
for(var a4=1;a4<6;a4++)
{
if(a3==1 && a4==5){continue;}
if(a3==5 && a4==1){continue;}
for(var a5=1;a5<6;a5++)
{
if(a4==1 && a5==5){continue;}
if(a4==5 && a5==1){continue;}
for(var a6=1;a6<6;a6++)
{
if(a5==1 && a6==5){continue;}
if(a5==5 && a6==1){continue;}
str+=a1+''+a2+''+a3+''+a4+''+a5+''+a6+'@@';
num++;
}
}
}
}
}
}
alert(str);
alert('num~~~~~~~~~'+num);//8266
}
public class C {
public static void main(String []args)
{
int a[]={1,2,2,4,5,6};
int i,j,k,l,m,n;
int count = 0;
for(i=0;i<a.length;i++)
{
for(j=0;j<a.length;j++)
{
for(k=0;k<a.length;k++)
{
for(l=0;l<a.length;l++)
{
for(m=0;m<a.length;m++)
{
for(n=0;n<a.length;n++)
{
if( a[k] ==4 || a[i]==1&&a[j]==5 || a[j]==1&&a[k]==5|| a[k]==1&&a[l]==5|| a[l]==1&&a[m]==5|| a[m]==1&&a[n]==5
|| a[i]==5&&a[j]==1 || a[j]==5&&a[k]==1|| a[k]==5&&a[l]==1|| a[l]==5&&a[m]==1|| a[m]==5&&a[n]==1)
{
continue;
}
else
{
if( i!=j && i!=k && i!=l&& i!=m && i!=n
&& j!=k && j!=l && j!=m &&j!=n
&& k!=l && k!=m && k!=n
&& l!=m && l!=n
&& m!=n)
{
count++; System.out.println(a[i]+""+a[j]+""+a[k]+""+a[l]+""+a[m]+""+a[n]);
}
}
}
}
}
}
}
}
count=count/2;
System.out.println(count);
}
}这里每一个排列都被打印了两次,原因是两个2他们两个交换一下位置又要去出来一个数,所以要除以2
a=a^b;
b=b^a;
a=a^b;
至于第一题,不好意思,JAVA认识偶,偶不认识JAVA.
。NET方面还是高效一些,框架搞好才能往上爬散。
{
protected static int listNb = 0;
public void printItemList(int item[], int nb)
{
int i = 0; for(i = 0; i < nb; i++)
{
// 第3位不能为4
if(item[3] == 4)
{
return ;
}// System.out.println("i = " + i + "nb = " + nb);
if(i < nb -1 )
{
// 1, 5不能相邻
if((item[i] == 1 && item[i + 1] == 5) || (item[i] == 5 && item[i + 1] == 1))
{
return ;
}
}
} listNb++; System.out.print(listNb + "th: ");
for(i = 0; i < nb; i++)
{
System.out.print(item[i]);
}
System.out.println(""); return ;
} public void perm(int nb, int maxNb, int outItem[], int item[])
{
int i = 0;
int j = 0;
int k = 0;
int bRedundent = 0;
int tempItem[] = {1, 2, 3, 4, 5, 6};
// perm();
for(i = 0; i < nb ; i++)
{
tempItem[i] = item[nb-1];
k = 0;
for(j = 0; j < nb; j++)
{
if(j != i)
{
tempItem[j] = outItem[k];
k++; // 相同的数字相邻只排列第一种
if((tempItem[i] == tempItem[j]) && (i == j + 1))
{
bRedundent = 1;
break;
}
}
} if(bRedundent == 1)
{
bRedundent = 0;
continue;
}
if(nb == maxNb)
{
printItemList(tempItem, nb);
//break;
}
else
{
perm(nb + 1, maxNb, tempItem, item);
}
} // printItemList();
}
public static void main(String args[])
{
int item[] = {1, 2, 2, 3, 4, 5};
int out_item[];
int temp_item[] = {1, 2, 2, 3, 4, 5};
perm pp = new perm();
pp.perm(1, 6, temp_item, item);
return ;
}
}
// 相同的数字相邻只排列第一种
if((tempItem[i] == tempItem[j]) && (i == j + 1))为
// 相同的数字相邻只排列第一种
if((tempItem[i] == tempItem[j]) && (i > j))
就可以了一共198个
public class test122345 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
test122345 tt= new test122345();
String[] number = {"1","2","2","3","4","5"};
String numberstr="122345";
int b=0;
int count=0;
for(int i=122345;i<=543221;i++)
{
if(tt.re('1', String.valueOf(i), 1)==-1 || tt.re('2', String.valueOf(i), 2)==-1 || tt.re('3', String.valueOf(i), 1)==-1 || tt.re('4', String.valueOf(i), 1)==-1 || tt.re('5', String.valueOf(i), 1)==-1)
{
}
else
{
if(tt.re2("4", String.valueOf(i), 3)==-1)
{
}
else
{
for(int j=0;j<number.length;j++)
{
String geti = String.valueOf(i);
String getstr = geti.substring(j,j+1);
b = numberstr.indexOf(getstr);
int w1 = 0;
w1 = geti.indexOf("1");
if(w1<=4)
{
char c5 = geti.charAt(w1+1);
if(c5=='5')
{
b = -1;
}
}
int w5 = 0;
w5 = geti.indexOf("5");
if(w5<=4)
{
char c11 = geti.charAt(w5+1);
if(c11=='1')
{
b = -1;
}
}
if(b == -1)
{
break;
}
}
if(b != -1)
{
count = count+1;
System.out.println("i:"+i);
}
}
}
}
System.out.println("count:"+count);
}
public int re(char c,String geti,int sum)
{
int count = 0;
char getChar;
for(int i=0;i<geti.length();i++)
{
getChar = geti.charAt(i);
if(c == getChar)
{
count = count + 1;
}
}
if(count>sum)
{
return -1;
}
else
{
return 0;
}
}
public int re2(String s,String geti,int wei)
{
int w4 =0;
w4 = geti.indexOf(s);
if (w4==wei)
{
return -1;
}
else
{
return 0;
}
}
}
i:122345
i:122354
i:122534
i:122543
i:123245
i:123254
i:123524
i:123542
i:124235
i:124253
i:124325
i:124352
i:124523
i:124532
i:125234
i:125243
i:125324
i:125342
i:132245
i:132254
i:132524
i:132542
i:134225
i:134252
i:134522
i:135224
i:135242
i:142235
i:142253
i:142325
i:142352
i:142523
i:142532
i:143225
i:143252
i:143522
i:145223
i:145232
i:145322
i:212345
i:212354
i:212534
i:212543
i:213245
i:213254
i:213524
i:213542
i:214235
i:214253
i:214325
i:214352
i:214523
i:214532
i:221345
i:221354
i:223145
i:223541
i:224135
i:224531
i:225314
i:225341
i:231245
i:231254
i:232145
i:232541
i:234125
i:234521
i:235214
i:235241
i:241235
i:241253
i:241325
i:241352
i:242135
i:242531
i:243125
i:243521
i:245213
i:245231
i:245312
i:245321
i:252134
i:252143
i:252314
i:252341
i:253124
i:253142
i:253214
i:253241
i:254123
i:254132
i:254213
i:254231
i:254312
i:254321
i:312245
i:312254
i:312524
i:312542
i:314225
i:314252
i:314522
i:321245
i:321254
i:322145
i:322541
i:324125
i:324521
i:325214
i:325241
i:341225
i:341252
i:342125
i:342521
i:345212
i:345221
i:352124
i:352142
i:352214
i:352241
i:354122
i:354212
i:354221
i:412235
i:412253
i:412325
i:412352
i:412523
i:412532
i:413225
i:413252
i:413522
i:421235
i:421253
i:421325
i:421352
i:422135
i:422531
i:423125
i:423521
i:425213
i:425231
i:425312
i:425321
i:431225
i:431252
i:432125
i:432521
i:435212
i:435221
i:452123
i:452132
i:452213
i:452231
i:452312
i:452321
i:453122
i:453212
i:453221
i:521234
i:521243
i:521324
i:521342
i:522134
i:522143
i:522314
i:522341
i:523124
i:523142
i:523214
i:523241
i:524123
i:524132
i:524213
i:524231
i:524312
i:524321
i:531224
i:531242
i:532124
i:532142
i:532214
i:532241
i:534122
i:534212
i:534221
i:541223
i:541232
i:541322
i:542123
i:542132
i:542213
i:542231
i:542312
i:542321
i:543122
i:543212
i:543221
count:198