一个程序题(把1...2..3...100以长度为3等分然后。。。。)

本文介绍了一个递归分组求和算法的实现过程,该算法将一系列数字按指定基数进行分组,并计算每组的和,最终返回所有组的和。通过递归调用实现了对分组结果的再次分组,直至只剩下一个数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[size=large][b] :D :lol: [color=blue]网上看到的一个程序题[/color]:[/b]
[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);

}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值