例如:3=1+2,15=7+8,100=18+19+20+21+22.求1000以内有多少这样的数,分别是哪些数?

解决方案 »

  1.   

    100内的,把100都改成1000看看是不是你要求的public static void main(String[] args)
    {
    int sum;
    for(int i=1;i<=100;i++)
    {
    sum=0;
    for(int j=i;j<=100;j++)
    {
    sum+=j;
    if(sum<100 )
    {
    if(sum!=j)
    {
    for(int k=i;k<=j;k++)
    {
    System.out.print(k);
    if(k!=j)
    System.out.print("+");
    }
    System.out.println("="+sum);
    }
    }
    else
    {
    break;
    }
    }

    }
    }
      

  2.   


    public static void go(int sum) {
    LinkedList<Integer> list = new LinkedList<Integer>();
    int t = 0;
    for (int i = 1; i < sum; i++) {
    if (t == sum) {
    System.out.println(list);
    }
    t += i;
    list.addLast(i);
    while (t > sum) {
    t -= list.getFirst();
    list.removeFirst();
    }
    }
    } public static void main(String[] args) {
    for(int i=1; i<=1000; i++){
                            go(i);
                    }
    }
      

  3.   


    void from(int start){
     sum = start +from(start + 1)}试试 迭代  代码没时间写了 
      

  4.   

    需求:输入N,找到所有和为N的连数
    假设找到n个连数的和为N,设n个连数的最小值为m,则 m+(m+1)+(m+2)+...+(m+n-1) = N
    根据等差数列求和公式
    即 (m+m+n-1)*n / 2 = N;
    再转 (m*2+n-1)*n = N *2;//注意 m*2+n-1和n一个为奇数一个为偶数求解思路:
    对N*2进行因数分解,必须满足 其中一个为奇数,另外一个为偶数.将任何一个因数赋值给n,则m*2+n-1为另外一个因数,计算出m.由此求出n个连数.
      

  5.   

    算法 public static void check(int N) {
    boolean find = false;
    for (int i = 3; i * i <= N * 2; i += 2) {
    if ((N * 2) % i == 0)// 整除
    {
    find |= show(N, i);
    find |= show(N, N * 2 / i);
    }
    }
    if (!find)
    System.out.println(N + " 不存在连数");
    } private static boolean show(int N, int n) {
    int m = (N * 2 / n + 1 - n) / 2;
    if (m <= 0)
    return false; // 这里判断m是否为自然数
    int[] array = new int[n];
    for (int i = 0; i < n; i++)
    array[i] = m + i;
    System.out.println(N + "=" + Arrays.toString(array));
    return true;
    }测试代码 check(100);
    check(40);
    check(999);
    check(8);测试结果100=[18, 19, 20, 21, 22]
    40=[6, 7, 8, 9, 10]
    999=[332, 333, 334]
    999=[107, 108, 109, 110, 111, 112, 113, 114, 115]
    999=[24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50]
    999=[9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45]
    8 不存在连数
      

  6.   

    修改下上面的代码for (int i = 3; i < N * 2; i += 2)奇数因数不一定要小于乘积的平方根。比如14的奇数因子7
      

  7.   


    /**
     @version 1.11 2000-04-22
     @author Cay Horstmann
     */public class Welcome { public static void main(String[] args) {
    int i = 1;
    int j = 100;
    System.out.println((i + j) * 100 / 2); }}
      

  8.   

    情况有很多种,可能是2个立连数可能是3个n个 , 
    上面有人说求每个可以用连数表示的用遍历(从1开始到<这个数)这也是一种情况
    所以很不确定,实际上这是一道算法上的题,编程并不是很难,只要把可能的情况举例写出来,代码就是简单的for循环语句和输出语句
      

  9.   


    public class TestJoinDigit { public static void main(String[] args) {
    printJoinDigit(1,1000);
    } public static void printJoinDigit(int start, int end) {
    for (int i = start; i <= end; i++) {
    //一个数最多连数个数j(1+j)/2=i,从1开始,j<sqrt(2*i)
    for (int j = 2; j <= (int) Math.sqrt(2*i); j++) {
    String join = parseDigit(i, j);
    //打印
    if (join != null) {
    String[] joinarr = join.split(":");
    int s = Integer.parseInt(joinarr[0]);
    int e = Integer.parseInt(joinarr[1]);
    StringBuffer sb = new StringBuffer("数"+i+"的"+j+"连数:");
    for(int n=s;n<=e;n++){
    sb.append(n+"  ");
    }
    System.out.println(sb.toString());
    }
    }
    }
    } /**
     * 
     * @param digit:分析的数字
     * @param n:连数个数
     * @return:符合条件的连数起始数和结束数字符串或者null
     */
    public static String parseDigit(int digit, int n) {
    StringBuffer sn = new StringBuffer();
    if (n % 2 == 1) {// 奇数个连数
    if (digit % n == 0) {
    return sn.append(digit / n - (n - 1) / 2).append(":").append(
    digit / n + (n - 1) / 2).toString();
    }
    } else {// 偶数个连数
    if (((2 * (digit / n) + 1)) * n / 2 == digit) {
    return sn.append(digit / n - n / 2 + 1).append(":").append(
    digit / n + n / 2).toString();
    }
    }
    return null;
    }}
      

  10.   


    import java.util.*;
    public class Test {

    public static void main(String[] args) {
    int num, start = 1, sum = 0, flag=0;;
    List<Integer> array = new ArrayList<Integer>();
    for(num=1; num<1000; num++){

    while(sum != num) {
    sum+=start;
    start++;
    //判断sum是否等于num
    if(sum>num){
    sum = 0;
    flag ++;
    start = flag + 1;
    }
    }
    //判断num是否能够分解
    if(flag+1 != start-1) {
    array.add(new Integer(sum));
    }
    //初始化sum,flag,start,准备计算下个数
    sum = 0;
    flag = 0;
    start = 1;
    }

    System.out.println("共有:" + array.size());
    System.out.print("它们是:");
    for(int i=0; i<array.size(); i++){
    if ((i+1) % 25 != 0){
    System.out.print(array.get(i) + " ");
    }else {
    System.out.println(array.get(i));
    }
    }
    }
    }