| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1689 人关注过本帖
标题:[讨论]连续数问题
只看楼主 加入收藏
meiling01
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2006-11-2
收藏
得分:0 
楼上的方法很好,数学问题用数学方法解决,很好的算法。
2006-11-22 09:30
smartwind
Rank: 1
等 级:新手上路
威 望:1
帖 子:277
专家分:0
注 册:2006-11-13
收藏
得分:0 
以下是引用perfect在2006-11-21 16:56:10的发言:

#include <stdio.h>

main()
{
int n,a,m,i,flag=0;
printf("input a number ( >0 ) : ");
scanf("%d",&m);

for(n=2; n<=m/2+1; n++)
{
if((2*m-n*n)%n==0)
{
if(((2*m-n*n)/n+1)%2==0)
{
flag=1;
a=((2*m-n*n)/n+1)/2 ;
printf("%d=",m);
for(i=0; i<n-1; i++)
printf("%d+",a++);
printf("%d\n",a);
}
}
}
if(flag==0) printf("Don't have\n");

}


设输入的数为m
输出的第一个数为a ,有n个连续的数
则可得
a a+1 a+2 .... a+n-1
即 (2a+n-1)n/2=m
对于每个可能的n,测试相应的a是否为整数,是,即可输出

你还不如全部改成double型,省掉好些if


2006-11-22 11:49
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 
根据20楼的试子写的
#include"stdio.h"
#define max(a,b) (2*a-b*(b-1))/(2*b)
main()
{
int num,i;
scanf("%d",&num);
for(i=2;max(num,i)>=1;i++)
if((2*num-i*(i-1))%(2*i)==0)
printf("%d----%d\n",max(num,i),max(num,i)+i-1);
}

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


羊肉串 葡萄干 哈密瓜!!
2006-11-22 21:24
perfect
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:81
专家分:0
注 册:2006-11-19
收藏
得分:0 
题目要求是连续的整数啊

片言可以明百意 坐驰可以役万里
2006-11-23 08:15
mp3aaa
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:2013
专家分:8
注 册:2006-2-15
收藏
得分:0 
以下是引用perfect在2006-11-23 8:15:16的发言:
题目要求是连续的整数啊

你仔细看我程序的结果啊


羊肉串 葡萄干 哈密瓜!!
2006-11-23 22:11
财鸟
Rank: 1
等 级:新手上路
帖 子:132
专家分:0
注 册:2006-11-2
收藏
得分:0 

是个好问题!!!!!!!!!!!
不过时间有限?我就不写程序了!!!!!!!
说说我的编程思想好了!!!!!!!!!1
定义一个数组!!!!!!要求它前后相差1
再定义一个变量M
M=M+1;把M的值给数组就可以了
用三个IF判断。
用两个FOR 语句。
最后输出就可以了!!!!!!!
简单吧
!!!!!!!!!!!!!
可能叙述的不清楚!!!!!!!!
我的确时间很急!!!!!!!!!
如有兴趣就和我探讨吧!!!!!!!!!!
QQ304239467

2006-11-24 13:09
shuaiye
Rank: 1
等 级:新手上路
帖 子:445
专家分:0
注 册:2006-5-15
收藏
得分:0 

[QUOTE]#include <stdio.h>

int main(void)
{
long left, right;
long sum;
long GIVEN;
scanf("%ld",&GIVEN);

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

这个想法不错.

不过有点要提,就是2的n次方是无解的如:2,4,6,8等.


由于工作,N久都没来了!
2006-11-24 13:49
shuaiye
Rank: 1
等 级:新手上路
帖 子:445
专家分:0
注 册:2006-5-15
收藏
得分:0 
忘了说了:2的N次方本身在这题无解,不是说"版主"程序有问题.

由于工作,N久都没来了!
2006-11-24 13:50
heamer_c
Rank: 1
等 级:新手上路
帖 子:92
专家分:0
注 册:2006-7-18
收藏
得分:0 
double mia
{
double n,i=1,j,max,k;
printf("请输入一个整数:\n");
scanf("%f",&n);
do
{i++;max=i;}
while(i*(i+1)/2<n);
for(i=1;i<=max;i++)
for(j=1;j<=n/2;j++)
if(j*i+i*(i-1)/2==n)
{printf("%f=",n);
for(k=0;k<i;k++)
printf("+%f",i+j);}
}这个怎么样?可是就是通不过啊,怎么了,看一下截图,提示错误是什么意思...[IMG]C:\Documents and Settings\Administrator\桌面[/IMG]

我就是程序,程序就是我,我还能退出程序吗?!
2006-11-24 13:57
快速回复:[讨论]连续数问题
数据加载中...
 
   



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

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