Java算法<1> ----持续更新中

Java算法是一种思想,解决的方案不只一种,只要能达到目的那就是一种好方法。我是一个比较笨的人,对待一个问题往往想的比较复杂,以下的解决方案只是我的一种解决思路,可直接运行,答案不唯一。平时比较忙,有时间就会写几道,练练脑子,写完就更新上来。

</pre>【算法1】  求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制<p></p><p><span style="white-space:pre"></span>源码:</p><p><span style="white-space:pre"></span></p><pre name="code" class="java">public static void main(String[] args) {
Scanner scan1=new Scanner(System.in);
System.out.println("请输入需要相加的数:");
String nums=scan1.next();
int num=Integer.parseInt(nums);
System.out.println("请输入多少个数相加");
Scanner scan2 = new Scanner(System.in);
String nums2=scan2.next();
int num2=Integer.parseInt(nums2);
StringBuffer buffer1=new StringBuffer();//控制需要相加的数的大小
int sum=0;
buffer1.append(num);

StringBuffer buffer2=null;//控制需要相加的数的位数
sum+=num;

for(int i=num2-1;i>0;i--){
buffer2=new StringBuffer();
for(int j=0;j<num2-i+1;j++){
buffer2.append(num);
}
buffer1.append("+"+buffer2);
sum+=Integer.parseInt(buffer2+"");
}
System.out.println(buffer1.toString());

System.out.println("相加之和为:"+sum);

}




【算法2】杨辉三角:


1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 


分析:

/*
* i=1 j=1 a[1][1]=1 
* i=2 j=1 a[2][1]=a[2][0]+a[1][0] 
*     j=2 a[2][2]=1 
* i=3 j=1 a[3][1]=1 
*     j=2 a[3][2]=a[3][1]+a[2][2] 
*     j=3 a[3][3]=1 
* i=4 j=1 a[4][1]=1 
*     j=2 a[4][2]=a[3][1]+ [3][2] 
*     j=3 a[4][3]=a[3][2] [3][3] 
*                   
* i=5 j=1 a[5][1]=1 
*     j=2 a[5][2]=a[4][1]+a[4][2] 
*     j=3 a[5][3]=a[4][2]+a[4][3] 
*     j=4 a[5][4]=a[4][3]+a[4][4] 
*     j=5 a[5][5]=1
*     
* i=6 j=1 a[6][1]=1
*     j=2 a[6][2]=a[5][1]+a[5][2]
*     j=3 a[6][3]=a[5][2]+a[5][3]
*     j=4 a[6][4]=a[5][3]+a[5][4]
*     j=5 a[6][5]=a[5][4]+a[5][5]
*     j=6 a[6][6]=1
*/

算法源码:

public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入要打印的行数:");
String cols = scan.next();
int col = Integer.parseInt(cols);
int a[][] = new int[col + 1][col + 1];
int i, j;
for (i = 1; i < col + 1; i++) {
for (j = 1; j <= i; j++) {
if (i == j || j == 1) {
a[i][j] = 1;
} else {
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
}
System.out.print(a[i][j]+" ");
}
System.out.print('\n');
}
}



【算法3】有一分数序列:2/13/25/38/513/821/13...求出这个数列的前N项之和

源码:

public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("请输入需要计算的项数:");
String nums=scan.next();
int num=Integer.parseInt(nums);

double sum=0;
double a[][]=new double[num][2];
for(int i=0;i<num;i++){
if(i==0){
a[0][0]=2;
a[0][1]=1;
sum+=a[0][0]/a[0][1];
}else{

a[i][0]=a[i-1][0]+a[i-1][1];
a[i][1]=a[i-1][0];
sum+=a[i][0]/a[i][1];
}
}
System.err.println(sum);
}


【算法4】猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 

源码:

public static void main(String[] args) {
int sum=1;
for(int i=9;i>0;i--){
sum=(sum+1)*2;
System.err.println(sum);
}
}


【算法5】:求1+2!+3!+...+n!的和

源码:

public static void main(String[] args) {
//求1+2!+3!+...+n!的和
Scanner scan=new Scanner(System.in);
System.out.println("请输入要加到的数:");
String nums=scan.next();
int num=Integer.parseInt(nums);
int sum=0;
for(int i=1;i<=num;i++){
int sum2=1;
for(int j=1;j<=i;j++){
sum2=sum2*j;
}
sum+=sum2;
}
System.out.println(sum);
}



【算法6】:/有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位

源码:

public static void main(String[] args) {
		Scanner scan=new Scanner(System.in);
		System.err.println("请输入人数:");
		String nums=scan.next();
		int num=Integer.parseInt(nums);
		
		boolean[] ps = new boolean[num];
		int count = ps.length; //判断是否是最后一个
		//开始都有人,初始化为true
		for (int i = 0; i < ps.length; i++) {
		ps[i] = true;
		}
		//数到3剔除
		for(int i = 0,j = 0;;i++){
		if(ps[i]){
		j++;
		if(j == 3){
		ps[i] = false;
		j=0;
		count --; //剔除一人少一人
		}
		}
		//从开始继续循环
		if(i == ps.length -1){
		i = -1;
		}
		if(count == 1){
		break; //最后一个人退出循环
		}
		}

		//输出最后存在的那个人
		for (int i = 0; i < ps.length; i++) {
		if(ps[i]){
		System.out.println("最后剩下的人的编号是:" + (i+1));
		}
		}
		
		
		
	}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值