1、如何不借助第三个变量进行两个数据的交换?
//方法一:算术运算 public void Change(int a,int b) { a = a+b; b = a-b; a = a-b; } //方法二:异或运算 public void Change(int a,int b) { a = a^b; b = a^b; a = a^b; }
2、有一工人甲,工资是三位数ABC元(每个字母代表0~9中的一个数字),组内其他五个人的工资可以这样表示:ACB、BAC、BCA、CAB、CBA,且这五个人的工资总额为3194元。请问工人甲的工资具体是多少?
public static void wage() { for(int i = 0;i<10;i++){ for(int j = 0;j<10;j++){ for(int k = 0;k<10;k++){ if((122*i+212*j+221*k)==3194){ System.out.println("ABC:"+(100*i+10*j+k)); } } } } }3、百钱买百鸡。一百元钱买一百只鸡,公鸡五元一只,母鸡三元一只,小鸡一元三只。问:公鸡、母鸡、小鸡各多少只?
//三重for循环 public void oneHundredChickens() { for(int i = 0;i<=20;i++){ for(int j = 0;j<=33;j++){ for(int k = 0;k<=300;k++){ if(k%3==0){ if(((5*i+3*j+k/3)==100)&&(i+j+k==100)){ System.out.println("公鸡: "+i+";母鸡: "+j+";小鸡: "+k); } } } } } } //双重for循环 public static void oneHundredChickens() { for(int i = 0;i<=20;i++){ for(int j = 0;j<=33;j++){ int chicken = 100-i-j; if(chicken%3==0){ if(((5*i+3*j+chicken/3)==100)&&(i+j+chicken==100)){ System.out.println("公鸡: "+i+";母鸡: "+j+";小鸡: "+chicken); } } } } } } /** * 单循环 * 由cock+hen+chicken==100和5*cock+3*hen+chicken/3)==100推出 * hen = (100 - 7*cock)/4 * chicken = (300 + 3*cock)/4 */ public void oneHundredChickens() { for(int cock = 0;cock<=20;cock++){ int hen = (100 - 7*cock)/4; int chicken = (300 + 3*cock)/4; if((cock|hen|chicken)>0 && (chicken%3==0) &&((5*cock+3*hen+chicken/3)==100) && (cock+hen+chicken==100)){ System.out.println("公鸡: "+cock+";母鸡: "+hen+";小鸡: "+chicken); } } } }4、打印菱形。
//分两部分打印 public static void diamond(int height) { int i = 0,j = 0,k = 0; //上半部分 for(i = 1;i<=height;i++){ for(j =1;j<=height-i;j++){ System.out.print(" "); } for(k = 1;k<=2*i-1;k++){ System.out.print("*"); } System.out.println(); } //下半部分 for(i = height-1;i>=0;i--){ for(j =1;j<=height-i;j++){ System.out.print(" "); } for(k = 2*i-1;k>0;k--){ System.out.print("*"); } System.out.println(); } } //优化算法,一步打印 public void diamond(int height) { int i = 0,j = 0,k = 0; int blankSpaceNum= -height; for(i = 0;i<=height*2-1;i++){ blankSpaceNum = blankSpaceNum+1; for(j =1;j<=(Math.abs(blankSpaceNum));j++){ System.out.print(" "); } for(k = 1;k<=(height-j+1)*2-1;k++){ System.out.print("*"); } System.out.println(); } }5、5个猴子分桃子。
有5个猴子分一堆桃子,不可以平分,5个猴子都回去睡觉了,晚上,第一个猴子深夜偷偷起来,丢掉一个桃子,正好可以5个人分,于是,他拿掉自己的那份回去了。第二个猴子也起来了,又丢了个桃子,又正好可以5个人分,于是,他也拿着自己的那份走了,后面的3,4,5猴子都是用同样的方法,也都正好。 问:至少有几个桃子?
public class D16 { public static void main(String[] args) { int number = 6; while(true) { if(isTheSmallestNumber(number)) { break; } number++; } System.out.println(number); } public static boolean isTheSmallestNumber(int number) { int i = 0; while(i<5 && number > 0) { if((number-1)%5==0) { number = (number-1)*4/5; i ++; } else { return false; } } return true; } }6、猴子吃桃问题
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子?
/** * @param day 天数 * @return peach_num 桃子数 */ public int peach(int day) { int peach_num = 1;//桃子数量 for(int i = 0;i<day-1;i++) { peach_num = (peach_num+1)*2; } return peach_num; }7、i++ 和 ++i
public class Test_i { public static void main(String[] args) { int number_a = 10; int number_b = 10; for (int i = 0;i < 10;i++){ number_a = number_a++; number_b = ++number_b; } System.out.println("number_a="+number_a);//结果:10 System.out.println("number_b="+number_b);//结果:20 } }8、取一个数的各位上的数值
public static void main(String[] args) { long a = 123456; for (int i = 0;i<6;i++) { System.out.println((a / (int) Math.pow(10, i)) % 10); } }9、异或 ^
public class Test_a { public static void main(String[] args) { boolean b1 = false ^ true; boolean b2 = true ^ true; boolean b3 = false ^ false; //相同为假,不同为真 System.out.println("b1 = "+b1);//结果:true System.out.println("b2 = "+b2);//结果:false System.out.println("b3 = "+b3);//结果:false int a1 = 3 ^ 4; int a2 = 7 ^ -1; int a3 = -1 ^ 7; int a4 = -1 ^ -7; System.out.println("a1 = "+a1);//结果:7 System.out.println("a2 = "+a2);//结果:-8 System.out.println("a3 = "+a3);//结果:-8 System.out.println("a4 = "+a4);//结果:-1 } }
