1.使用Java语言编写代码,将一个正整数分解质因数,例如:输入90,打印输出90=2*3*3*5。
代码:
/**
* @Title: Test11.java
* @Package com.cayden.test
* @Description: TODO
* Copyright: Copyright (c) 2012
*
* @author cuiran
* @date 2012-2-13 下午08:46:17
* @version V1.0
*/
package com.cayden.test;
import java.util.Scanner;
import java.util.Vector;
/**
* @author cuiran
*
*/
public class Test11 {
/**
* @param args
*/
public static void main(String[] args){
System.out.println("请你输入一个正整数:");
Scanner sc=new Scanner(System.in);
int Num=sc.nextInt();
Vector<Integer> vec=new Vector();
Lab:for(int i=2;i<=Num;i++){
for(int j=2;j<=i/2;j++){
if(i%j==0&&i!=2){
continue Lab;
}
}
vec.add(i);
}
System.out.println(Num+"的分解结果是:\n");
System.out.print(Num+"=");
int theNum=Num;
boolean help=true;
for(int k=0;k<vec.size();k++){
int qq=(int)vec.get(k);
if(theNum<qq)
break;
if(theNum%qq==0){
if(help==true){
System.out.print(qq);
help=false;
}else{
System.out.print("*"+qq);
}
k--;
theNum=theNum/qq;
}
}
System.out.println("\n分解完毕!");
}
}
2.题目如下:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。
/**
* @Title: ATest.java
* @Package com.cayden.test
* @Description: TODO
* Copyright: Copyright (c) 2012
*
* @author cuiran
* @date 2012-2-13 下午09:22:00
* @version V1.0
*/
package com.cayden.test;
/**
* @author cuiran
*
*/
public class ATest{
private static boolean is1Or5(char a,char b){
if(a=='3' && b=='5')return true;
if(a=='5' && b=='3')return true;
return false;
}
private static int countOf2(char[] num,int index){
int n=0;
for(int i=0;i<index;i++){
if(num[i]=='2')n++;
}
return n;
}
private static boolean hasSameNumber(int index,char a, char[] num){
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 = countOf2(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 && is1Or5(num[index-1],number[i]))continue;//去除相邻的3和5
if(hasSameNumber(index,number[i], num))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();
}
}
3.编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。
/**
* @Title: Test3.java
* @Package com.cayden.test
* @Description: TODO
* Copyright: Copyright (c) 2012
*
* @author cuiran
* @date 2012-2-13 下午09:29:08
* @version V1.0
*/
package com.cayden.test;
/**
* @author cuiran
* 根据编码来进行判断
*/
public class Test3 {
public static void main(String[] args) throws Exception{
String a = "我ABC汉DEF" ;
int len = 6 ;
String encoding = "UTF-8" ;
System.out.println( getSubString(a, len,encoding) );
a = "我ABC";
len = 4 ;
encoding = "gbk" ;
System.out.println( getSubString(a, len,encoding) );
}
/**
*
* @param str 传入字符串
* @param len 截取字节数
* @param encoding 编码方式
* @return 返回截取后的字符串
* @throws Exception
*/
public static String getSubString(String str,int len,String encoding) throws Exception{
if(str == null || str.length()<1) return null ;
if(len<1) return null ;
StringBuffer sb = new StringBuffer();
int all = 0 ;
for(int i=0;i<str.length();i++){
String tmp = str.substring(i,i+1);
sb.append(tmp);
byte[] tmpB = tmp.getBytes(encoding);
all +=tmpB.length ;
if(all>=len){
break ;
}
}
return sb.toString() ;
}
}
4. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
/**
* @Title: Test4.java
* @Package com.cayden.test
* @Description: TODO
* Copyright: Copyright (c) 2012
*
* @author cuiran
* @date 2012-2-13 下午09:35:38
* @version V1.0
*/
package com.cayden.test;
/**
* @author cuiran
*
*/
public class Test4 {
/**
* @param args
*/
public static void main(String[] args) {
long f1 = 1L, f2 = 1L;
long f;
for(int i=3; i<20; i++) {
f = f2;
f2 = f1 + f2;
f1 = f;
System.out.print("第" + i +"个月的兔子对数: ");
System.out.println(" " + f2);
}
}
}
5.打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方
/**
* @Title: Flower.java
* @Package com.cayden.test
* @Description: TODO
* Copyright: Copyright (c) 2012
*
* @author cuiran
* @date 2012-2-13 下午09:52:36
* @version V1.0
*/
package com.cayden.test;
/**
* @author cuiran
*
*/
public class Flower {
/**
* @param args
*/
public static void main(String[] args) {
int f1=0;
int f2=0;
int f3=0;
for(int i=100;i<1000;i++){
f1=i%10;
f2=i/10%10;
f3=i/100;
if(i==f1*f1*f1+f2*f2*f2+f3*f3*f3){
System.out.println(i);
}
}
}
}