[size=large][b] :D :lol: [color=blue]网上看到的一个程序题[/color]:[/b]
[color=blue][b]以下是我的做法,请大家多多指教![/b][/color]
[/size]
[color=blue][b]以下是我的做法,请大家多多指教![/b][/color]
[/size]
package com.james.basic;
public class Divide {
/**
* 有一百个数1,2,3,4,5,.......100现在要把它们以3为等分分成如下
* {1,2,3}{4,5,6}{7,8,9}......{97,98,99},{100}
* 我们得到34个大括号
* 然后计算大括号里面的三个数的和,得到
* 6,15,........................100再把这34个数以以3为等分
* 一直到最后只留下一个数即 这100个数的总和
*
*/
//以3为基数划分
// 此处length为基数
public int[] divide (int [] a , int length){
int b [] =null;
//首先判断数组a与所要等分的基数的大小
if(a.length<length){
b = new int [1];
b[0]=sumSubarray(a,a.length,0);
}else if(a.length>=length){
int div = 0; //the number groups be divided by the length
//判断a.length是否是可以整除基数length
if(a.length%length==0){
div = a.length/length;
b = new int [div];
for(int j=0;j<div;j++){
// System.out.println(j);
b[j] = sumSubarray(a,length,j*length);
}
divide(b,length); //递归调用
}
//不可被整除的话要区别对待
else if(a.length%length!=0){
div = a.length/length+1;
b = new int [div];
for(int j=0;j<div-1;j++){
b[j] = sumSubarray(a,length,j*length);
}
//此处为区别对待
int k=a.length-(div-1)*length;
b[div-1]= sumSubarray(a,k,(div-1)*length);
divide(b,length); //递归调用
}
}
return b;
}
//计算数组b内以start为开始,长度为length1(就是length1个数的和)的和
public int sumSubarray (int b[],int length1,int start){
int subsum = 0;
int k = start;
for(; k<(length1+start); k++){
System.out.println("the start is : "+k);
subsum += b[k];
}
return subsum;
}
public static void main(String[] args) {
Divide d = new Divide ();
int [] a ={1,2,3,4,5,6,7,8,9,10};
int c []=d.divide(a, 3);
int k=d.sumSubarray(c, c.length, 0);
System.out.println("\n"+"the terminal result is : "+k);
}
}