| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2113 人关注过本帖
标题:[求助]任何正整数能用连续的奇数相加而得,判断其是否正确
只看楼主 加入收藏
wangzhiqun3
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-11-21
收藏
 问题点数:0 回复次数:7 
[求助]任何正整数能用连续的奇数相加而得,判断其是否正确
有人说任何正整数能用连续的奇数相加而得,例如 13*13*13 =2197 =157+159……+181 .
写一个程序来判断这个说法正确与否。如果是正确的,输出这个加法表达式的第一个和最后一个数。如果不正确,输出该数不可以被这样分割。
Note:
1. 正整数的取值范围应由使用者自己判断。当输入0时,程序结束。
2. 输出的数据要分开显示。
For example:
Input output
11 (11 can or cannot be divided, then wait for the user to input other numbers)
20 (9 11)
0 program ends
例子可能是错的,应该不是3次方,而是任意的一个正整数。
应该是用循环结构吧...

[此贴子已经被作者于2006-11-22 21:17:23编辑过]

搜索更多相关主题的帖子: 整数 奇数 相加 判断 
2006-11-21 14:16
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

质数应该没有.


倚天照海花无数,流水高山心自知。
2006-11-21 15:14
smartwind
Rank: 1
等 级:新手上路
威 望:1
帖 子:277
专家分:0
注 册:2006-11-13
收藏
得分:0 

看题目中的那个例子似乎是说任何整数的3次方吧


2006-11-21 15:23
perfect
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:81
专家分:0
注 册:2006-11-19
收藏
得分:0 
1 就不行,所以是不正确的
这个问题可以转化成“连续数问题”,只是间隔为2的连续数
你可以去看看

片言可以明百意 坐驰可以役万里
2006-11-21 18:07
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
收藏
得分:0 
呵呵!2也没有!

该学习了。。。
2006-11-21 19:07
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
收藏
得分:0 

好像是从三开始都有吧!
#include <stdio.h>

int main(void)
{
long n, t, i;

while(EOF != scanf("%ld", &n)&& n != 0)
{
t = n*n*n;
for(i = 2;i < t;i ++)
{
if(t%i == 0&&i%2 == 1&&n/i%2 == 1)
printf("%-5ld%-5ld\n", t/i - i + 1, t/i + i -1);
if(t%i == 0&&i%2 == 0&&n/i%2 == 0&&(t/i - i + 1) > 0&&(t/i - i + 1)%2 == 1)
printf("%-5ld%-5ld\n", t/i - i + 1, t/i +i - 1);
}
}

return 0;
}


该学习了。。。
2006-11-21 19:48
我不是郭靖
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:494
专家分:6
注 册:2006-10-4
收藏
得分:0 

Nocomachns定理:任何一个正整数n的立方一定可以表示成n个连续的奇数的和.
n*n*n=(n*n-n+1)+(n*n-n+3)+...+(n*n+n-1)


验证程序:(不一定是n个数哦)

#include <stdio.h>

int main()
{
long left, right, i;
long sum;
long GIVEN, n;
scanf ("%ld",& GIVEN);
n = GIVEN * GIVEN * GIVEN;

for (sum = 0, left = right = 1; left < n/2+1; right += 2)
{
sum += right;
while (sum > n)
{
sum -= left;
left += 2;
}
if (sum == n)
{
printf("%ld=%ld", n, left);
for(i = left + 2; i <= right; i+=2)
printf("+%ld", i);
printf("\n");
}
}
return 0;
}


2006-11-21 19:58
zhanghuan_10
Rank: 1
等 级:新手上路
威 望:2
帖 子:751
专家分:0
注 册:2006-10-25
收藏
得分:0 
呵呵,版主作的对!我的那个做错了!

该学习了。。。
2006-11-21 20:14
快速回复:[求助]任何正整数能用连续的奇数相加而得,判断其是否正确
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.054948 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved