华为机试-尼科彻斯定理
题目描述
验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。
例如:
1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19
接口说明
原型:
/*
功能: 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。
原型:
int GetSequeOddNum(int m,char * pcSequeOddNum);
输入参数:
int m:整数(取值范围:1~100)
返回值:
m个连续奇数(格式:“7+9+11”);
*/
public String GetSequeOddNum(int m)
{
/*在这里实现功能*/
return null;
}
输入描述:
输入一个int整数
输出描述:
输出分解后的string
示例1
输入
6
输出
31+33+35+37+39+41
程序实现:
- import java.util.HashSet;
- import java.util.Scanner;
- /**
- * 题目描述 验证尼科彻斯定理,即:任何一个整数m的立方都可以写成m个连续奇数之和。 例如: 1^3=1 2^3=3+5 3^3=7+9+11
- * 4^3=13+15+17+19
- *
- */
- public class Main {
- public static void main(String[] args) {
- @SuppressWarnings("resource")
- Scanner scanner = new Scanner(System.in);
- while (scanner.hasNext()) {
- int num = scanner.nextInt();
- String s = GetSequeOddNum(num);
- System.out.println(s);
- }
- }
- private static String GetSequeOddNum(int num) {
- HashSet<Integer> set = new HashSet<>();
- long sum = (long) Math.pow(num, 3);
- long mid = sum / num;
- long sum1 = 0;
- long start = 0;
- StringBuilder stringBuilder = new StringBuilder();
- if (num % 2 == 0) {
- // 偶数
- start = mid - 1 - (num - 2);
- } else {
- // 奇数
- start = mid - (num - 1);
- }
- sum1 += start;
- stringBuilder.append(start);
- for (int i = 2; i <= num; i++) {
- start += 2;
- sum1 += start;
- stringBuilder.append("+" + start);
- }
- if (sum1 == sum) {
- return stringBuilder.toString();
- } else {
- return null;
- }
- }
- }
posted on 2017-07-13 09:09 WenjieWangFlyToWorld 阅读(126) 评论(0) 编辑 收藏 举报