输入一自然数n,求组成n3的n个连续奇数
来源:互联网 发布:广州城中村网络被承包 编辑:程序博客网 时间:2024/04/30 07:05
/**
* @classname:OddNumberTotal.java
* @copyright:Dolphin Software Corporation
* @author xulei
* @date:Jun 25, 2010 9:40:38 AM
* @version:1.0
* @remark:
*/
package com.dol.dop.dataframearithmetic.arithmetic.util;
import java.util.HashMap;
public class OddNumberTotal
{
/**
* @param args
* @return: void
* @auther: xulei
* @date:Jun 25, 2010 9:40:38 AM
* @remarks: 任何一个自然数m的立方均可写成m个连续奇数之和。例如: 1^3=1
*
* 2^3=3+5
*
* 3^3=7+9+11
*
* 4^3=13+15+17+19
*
* 编程实现:输入一自然数n,求组成n3的n个连续奇数。
*
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
OddNumberTotal odds = new OddNumberTotal();
int n = 81;
int total = odds.sum(n);
System.out.println(n + " 的3次方 " + total+" 的连续奇数:");
HashMap t = odds.getOddNumbers(total, n);
for (int i = 0; i < t.size(); i++)
{
System.out.print(t.get(i) + " ");
}
}
/**
* @param sum
* 总和
* @param n
* 自然数
* @return
* @return: HashMap
* @auther: xulei
* @date:Jun 25, 2010 11:04:11 AM
* @remarks:
*/
private HashMap getOddNumbers(int sum, int n)
{
if (n <= 0)
{
System.out.println("请输入自然数");
return null;
}
HashMap oddNumbers = new HashMap();
// midOddNumber中间数,
// tmp临时数据,保存midOddNumber初始值
// count统计中间数的左右计算次数
int midOddNumber, tmp, count = 0;
midOddNumber = ((n % 2) == 1) ? sum / n : sum / n - 1;
count = ((n % 2) == 1) ? n / 2 : (n / 2) - 1;
tmp = midOddNumber;
oddNumbers.put(count, tmp);
// 为1时的处理
if (midOddNumber == 1)
return oddNumbers;
//左边奇数
for (int j = count - 1; j >= 0; j--)
{
midOddNumber = midOddNumber - 2;
oddNumbers.put(j, midOddNumber);
}
//复原中间数
midOddNumber = tmp;
//右边奇数
for (int j = count + 1; j <= n; j++)
{
midOddNumber = midOddNumber + 2;
oddNumbers.put(j, midOddNumber);
}
// 当n^3中的n为偶数时需要去掉hashmap的最后一位数据
if ((n % 2) != 1)
oddNumbers.remove(n);
return oddNumbers;
}
private int sum(int n)
{
int total = n * n * n;
return total;
}
}
汗,简单问题弄复杂了,这是优化后的算法:
package com.arithmetic;
import java.util.ArrayList;
import java.util.List;
/**
* @author
* 任何一个自然数m的立方均可写成m个连续奇数之和
* 如:
* 1 ^3 = 1;
* 2 ^3 = 3 + 5;
* 3 ^3 = 7 + 9 + 11;
* 4 ^3 = 13 + 15 + 17 + 19
* 5 ^3 = 21 + 23 + 25 + 27 + 29
* 6 ^3 = 31 + 33 + 35 + 37 + 39 + 41;
* 编程实现:输入一自然数m,求组成m3的m个连续奇数
* 根据以上数据可以看到:
* 第一个奇数为(m*(m-1))+1,又已知为m个连续奇数
*/
public class CubeSum {
public static List<Integer> cubeFirst(int num) {
List<Integer> returns = new ArrayList<Integer>();
if (num <= 0) {
return null;
}
if (num == 1) {
returns.add(1);
return returns;
}
//获得第一个奇数
int firstOddNumber = (num * (num - 1)) + 1;
returns.add(firstOddNumber);
//遍历num-1次,获取所有奇数
for (int i = 1; i < num; i++) {
firstOddNumber = firstOddNumber + 2;
returns.add(firstOddNumber);
}
return returns;
}
public static void main(String[] args) {
List<Integer> result = CubeSum.cubeFirst(9);
for (int i = 0; i < result.size(); i++) {
System.out.print(result.get(i).intValue());
if (i != result.size() - 1) {
System.out.print("+");
}
}
}
}
- 输入一自然数n,求组成n3的n个连续奇数
- 蓝桥杯 C++ 输入一个自然数n,n的立方等于n 个连续的奇数和
- 一个正整数n被分成若干个不同自然数的和,求组成n的一组自然数的最大乘积
- 用递归方法求前n个自然数的平方和
- 一个奇数N的立方等于N个连续奇数之和
- 算法小题一(论证任何自然数的n次方等于n个连续基数之和)
- 算法小题一(论证任何自然数的n次方等于n个连续基数之和)
- 和为n的连续自然数序列
- 求自然数n的自然排列
- 将任意一个正整数n整数的立方分解为连续n个奇数之和
- fjnu 1757 找i个连续自然数累加为N
- 找i个连续自然数累加为N
- 1757找i个连续自然数累加为N
- WOJ1088-从1开始的N个连续自然数的M次方之和
- 编程之美2.21 什么样的数不能写成连续N个自然数之和
- 设n为自然数;求n的阶乘。
- N个自然数的排序算法
- 前N个自然数的随机置换
- JAVA中i=i++没变化的原因
- asp.net分隔字符串
- JavaScript 面向对象程序设计-封装
- [精华] GDB基本用法
- VC常用几种界面库的选择
- 输入一自然数n,求组成n3的n个连续奇数
- 集群cpu使用率监控系统的简单实现(二)监控端的实现
- IIS限制,流量限制与CPU限制的对比
- WiFi设计原理(源码分析)
- 齐纳二极管和肖特基二极管
- 关于java中getInstance()方法
- rescue for rhce5.4 含修改root密码策略
- js 操作select checkbox 及radio
- 求调试过S3C44B0的朋友