首页 > 试题广场 >

尼科彻斯定理

[编程题]尼科彻斯定理
  • 热度指数:136718 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}尼科彻斯定理,又称为斐波那契数列定理,指的是对于任意正整数 n,存在一个由连续奇数组成的数列,使得该数列的和等于 n 的立方。
\hspace{15pt}例如:
\hspace{23pt}\bullet\,对于 n=1,数列 \left\{1\right\} 的和为 1^3=1
\hspace{23pt}\bullet\,对于 n=2,数列 \left\{3,5\right\} 的和为 2^3=3+5
\hspace{23pt}\bullet\,对于 n=3,数列 \left\{7,9,11\right\} 的和为 3^3=7+9+11
\hspace{23pt}\bullet\,对于 n=4,数列 \left\{13,15,17,19\right\} 的和为 4^3=13+15+17+19

\hspace{15pt}现在,给定一个正整数 n,请输出这个数列中的元素从小到大相加的形式。
\hspace{15pt}如果有多个这样的序列,请输出长度为 n 的那个。

输入描述:
\hspace{15pt}输入一个整数 n \left(1 \leqq n \leqq 100\right) 。


输出描述:
\hspace{15pt}在一行上输出一个字符串,用于描述这个数列中的元素从小到大相加的形式。元素与元素之间用加号连接。
示例1

输入

1

输出

1
示例2

输入

2

输出

3+5
示例3

输入

3

输出

7+9+11
示例4

输入

4

输出

13+15+17+19
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()) {
            int n = in.nextInt();
            int start = n * (n - 1) + 1;
            StringBuffer sb = new StringBuffer();
            sb.append(start);
            if (n > 1) {
                for (int i = 1; i < n; i++) {
                    start += 2;
                    sb.append("+");
                    sb.append(start);
                }
            }
            System.out.println(sb);
        }
    }
}
发表于 2025-03-27 16:37:01 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int a = in.nextInt();
            System.out.println(printManchester(a));
        }
    }

    private static String printManchester(int n) {
        int begin = n * n - (n - 1);
        StringBuilder s = new StringBuilder();
        for (int i = 0; i < n; i++) {
            s.append(begin).append("+");
            begin += 2;
        }
        return s.substring(0, s.length() - 1).toString();
    }
}


发表于 2025-02-05 20:19:01 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int m = in.nextInt();
        int avg = m * m;
        for (int i = avg - m + 1; i < avg + m - 1; i += 2) {
            System.out.print(i + "+");
        }
        System.out.print(avg + m - 1);
    }
}
发表于 2024-10-02 17:10:46 回复(0)
假设输入是a,第一项是a2-a+1,最后一项是a2+a-1,方差是2
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        StringBuilder res = new StringBuilder();
        for(int i = a * a - a + 1; i < a * a + a - 1; i += 2){
            res.append(i + "+");
        }
        res.append(a * a + a -1);
        System.out.println(res);
    }
}
发表于 2024-08-24 17:50:17 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        int start = num*(num-1)+1;//第一个起始数遵循此公式
        for(int i = 0; i < num; i++){
            if(i == num-1){
                System.out.print(start);
            }else{
                System.out.print(start+"+");
            }   
            start+=2;
        }
    }
}
发表于 2024-07-09 11:10:49 回复(0)
找规律即可
第一个开始的值为(输入值的平方-(输入值-1))
public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        int target = num * num * num;
        //思路:直接查找第一个开始相加的奇数,然后加到目标值即可
        int begin = num * num - (num - 1);
        String answer = "";
        int count = 0;
        for (int i = begin; i <= target; i += 2) {
            if (count < target) {
                count += i;
                if (i == begin) {
                    answer += i;
                } else {
                    answer = answer + "+" + i;
                }
            } else
                break;
        }
        System.out.println(answer);
    }


发表于 2024-06-25 20:25:00 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int start = num * (num - 1) + 1;
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < num; i++) {
            sb.append(start).append("+");
            start += 2;
        }
        System.out.println(sb.substring(0, sb.length() - 1));
    }
}

发表于 2024-01-05 18:18:10 回复(0)
import java.util.Scanner;

import java.math.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        double n = in.nextInt();
        int m = (int)Math.pow(n, 3.0);
        for (int i = 1; i <= m; i = i + 2) {
            int sum = 0;
            for (int k = 0; k < n; k++) {
                sum += (i + 2 * k);
            }
            if (sum == m) {
                StringBuilder sb = new StringBuilder();
                for (int k = 0; k < n; k++) {
                    sb.append((i+2*k)+"+");
                }
                System.out.println(sb.substring(0, sb.length()-1));
            }
        }
    }
}

发表于 2023-11-27 20:05:23 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        if (in.hasNext()) {
            int inputInt = in.nextInt();
            int result = (int) Math.pow(inputInt, 3);
            int firstOdd = 1;
            int middleValue = result / inputInt; // == pow(inputInt, 2)
            // 输入值
            if (inputInt % 2 == 0) {
                // 偶数
                firstOdd = (middleValue + 1) - ((inputInt / 2) * 2);
            } else {
                // 奇数
                firstOdd = middleValue - ((inputInt - 1) / 2 * 2);
            }
            int testResult = 0;
            StringBuffer outputResult = new StringBuffer();
            for (int i = 0; i < inputInt; i++) {
                int item = firstOdd + (i *2);
                testResult += item;
                outputResult.append(item);
                if (i < inputInt - 1) {
                    outputResult.append("+");
                }
            }
            if (testResult == result) {
                // 验证成功,输出结果
                System.out.println(outputResult.toString());
            }

        }
    }
}

发表于 2023-09-04 11:17:19 回复(0)
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringJoiner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int pow = (int) Math.pow(n, 3);

        // 计算起始值
        int number = (int) Math.pow(n, 2);
        int i = 0;
        if (n % 2 == 1) {
            i = number - n / 2 * 2;
        } else {
            i = number - n / 2 * 2 + 1;
        }


        StringJoiner sj = new StringJoiner("+", "", "");
        // 循环
        int sum = 0;
        for (int j = 0; j < n; j++) {
            sj.add(String.valueOf(i + 2 * j));
            sum += i + 2 * j;
        }

        // 判断n个奇数之和是否等于n的立方
        if (sum == pow) {
            System.out.println(sj);
        }
    }
}

发表于 2023-08-13 09:18:16 回复(0)
import java.io.*;

public class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str=br.readLine().trim();
        if(str.equals("1")) System.out.println(1);
        else{
            StringBuilder sb = new StringBuilder();
            int m=Integer.parseInt(str);
            //分解式的第一个数值=(输入值*(输入值-1))+1
            int star= m*(m-1)+1;
            //拼接连续m个奇数相加的分解式
            for(int i=0;i<m;i++){
                sb.append(star+"+");
                star+=2;
            }
            //删除最后一个加号
            sb.deleteCharAt(sb.length()-1);
            System.out.println(sb.toString());
        }
    }
}

发表于 2023-07-05 19:03:31 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        while (in.hasNextInt()) {
            int a = in.nextInt();
            int b = a * a;

            for (int i = 0, j = 0; j < a; i = i + 2, j++) {
                System.out.print(b - a + 1 + i);
                if (j < a - 1) {
                    System.out.print("+");
                }
            }
        }
    }
}
n的平方-n+1就是n个奇数的第一个,然后依次加2就是剩下的n-1个奇数
发表于 2023-06-30 18:32:45 回复(0)
import java.util.List;
import java.util.ArrayList;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int input = in.nextInt();
            List<String> numArr = new ArrayList<>(Math.abs(input));
            if (input == 0) {
                System.out.println(0);
            } else {
                if (input > 0 ) {
                    for (int i = 0, k = 0; i < Math.abs(input); i++, k += 2) {
                        numArr.add(String.valueOf(input * (input - 1) + 1 + k));
                    }
                    System.out.println(String.join("+", numArr));
                } else {
                    for (int i = 0, k = 0; i < Math.abs(input); i++, k += 2) {
                        numArr.add(String.valueOf(input * (input + 1) + 1 + k));
                    }
                    System.out.println("-" + String.join("-", numArr));
                }
            }
        }
    }
}
题目说整数,还以为会有负数,结果提了一下发现没有负数的用例
发表于 2023-06-28 17:22:52 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        int m = in.nextInt();
        int n = (int)Math.pow(m,3);
        StringBuilder bd = new StringBuilder();
        if(m%2==0){
            for(int i=0;i<m;i++){
                bd.append(n/m-m+1+2*i).append("+");          
            }
        }else{
            for(int i=0;i<m;i++){
                bd.append(n/m-(m-1)+2*i).append("+");
            }
        }
        System.out.print(bd.substring(0,bd.length()-1));
    }
}
发表于 2023-06-23 17:18:55 回复(0)
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    static int index=1;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        ArrayList<String> list=new ArrayList<>();
        int num=in.nextInt();
        int index=1;
        for(int i=1;i<=100;i++){
            list.add(getResult((int)Math.pow(i,3)));
            if(list.size()==num){
                System.out.print(list.get(num-1));
            }
        }
    }
    public static String getResult(int num){
        int sum=0;
        String str="";
        for(int i=index;;i++){
            if(i%2!=0){
                sum+=i;
                str+=i+"+";
                if(sum==num){
                    index=i+1;
                    return str.substring(0,str.length()-1);
                }
            }

        }
    }
}

发表于 2023-06-06 09:16:10 回复(0)
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            int m = in.nextInt();
            int pow = (int)Math.pow(m,3);
            int first = 0;
            if(m%2==0){
              int zhong = pow/m -1;//第m/2个
                first = zhong- (m/2-1)*2;//第一个值
            }else{
              int zhong = pow/m;//第(m+1)/2个
               first = zhong- ((m+1)/2-1)*2;
            }
            for(int i=1;i<=m;i++){
                 System.out.print(first+(i-1)*2);
                 if(i!=m){
                    System.out.print("+");
                 }
            }
           
        }
    }
发表于 2023-04-22 19:06:09 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a = in.nextInt();
        for (int i = 0; i < a; i++) {
            //找规律,规律如代码
            System.out.print(a * a - (a - 1) + i * 2);
            if (i != a - 1)
                System.out.print("+");
        }
    }
}

发表于 2023-04-11 23:42:03 回复(0)