关于编程大赛的一道题目,一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,找出这样的数并输出!

题目描述:一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如:
15=1+2+3+4+5
15=4+5+6
15=7+8
请编写程序,根据输入的任何一个正整数,找出符合这种要求的所有连续正整数序列。
例如:输入15,则输出
15=1+2+3+4+5
15=4+5+6
15=7+8
若不符合则输出提示信息!
要求要用C语言实现,因为本人目前只能看懂C语言!

这个问题看起来不是很简单,需要设计一个算法:

先讲数学:

设:

an=a+(n-1)*d (这里d=1)

a1=a

an=a+n-1

sn=(a1+an)n/2=(2a-1+n)/2

再回到这个编程上来:

我们的输入数据其实就是sn,需要找到以a开始的n个连续的递增数列使得和为sn。

这里我们可以用循环来判定,给定一个n,sn已知,就可以求出a,如果a为正整数那么就可以找到等差数列的首项,加上n给定,d=1,那么就可以写出这个和式子。

代码如下:

#include<stdio.h>

void main()

{

int input,i,n,flag;

float a;//等差数列的首项不一定为整数

flag=0;

printf("输入判断的整数:\n");

scanf("%d",&input);

for(n=2;n<=input;n++)

{

a=(2*input+n-n*n)/(2.0*n);//求的首项

if(int(a)==a&&a>0)//如果为整整数,则满足要求

{

printf("%d=%d",input,int(a));//输出的序列为整数,a实质是整数,那么强制转化类型不影响结果

for(i=1;i<=n-1;i++)

printf("+%d",int(a+i));//等差数列的其他项也为整数,a+i实质是整数,装换类型

printf("\n");

flag++;//flag记录满足要求的数列数

}

}

if(flag==0)   //flag初始为0,通过上面的循环,如果有满足的在则不为0,为0则说明不能写成等差数列

printf("%d不能被表示成n连续正整数之和\n",input);

}

温馨提示:内容为网友见解,仅供参考
无其他回答

关于编程大赛的一道题目,一个正整数有可能可以被表示为n(n>=2)个连 ...
for(n=2;n<=input;n++) { a=(2*input+n-n*n)\/(2.0*n);\/\/求的首项 if(int(a)==a&&a>0)\/\/如果为整整数,则满足要求 { printf("%d=%d",input,int(a));\/\/输出的序列为整数,a实质是整数,那么强制转化类型不影响结果 for(i=1;i<=n-1;i++) printf("+%d",int(a+i));\/\/等差数列的...

一个正整数有可能可以被表示为 n(n>=2) 个连续正整数之和
int n;printf("输入一个正整数:");scanf("%d",&n);fun(n);} \/\/===

一个教授逻辑学的教授,有三个学生,而且三个学生均非常聪明!
一天教授给他们出了一个题,教授在每个人脑门上贴了一张纸条并告诉他们,每个人的纸条上都写了一个正整数,且某两个数的和等于第三个!(每个人可以看见另两个数,但看不见自己的) 教授问第一个学生:你能猜出自己的数吗?回答:不能,问第二个,不能,第三个,不能,再问第一个,不能,第二个,不能,第三个:我...

有谁能告诉我几个逻辑推理问题(最好有答案)
也就是说,对于桌面上任意一点,到最近的圆心的距离都小于2,所以,整个桌面可以 用n个半径为2的硬币覆盖。 把桌面和硬币的尺度都缩小一倍,那么,长、宽各是原桌面一半的小桌面,就可以用n个半径为1的硬币覆盖。那么,把原来的桌子分割成相等的4块小桌子,那么 每块小桌子都可以用n个半径为1的硬币覆盖,因此,整个桌面...

有3个人去买东西,看上件30元的 ,老板说春节免了5元。服务员贪了2元...
也就是说,对于桌面上任意一点,到最近的圆心的距离都小于2,所以,整个桌面可以用n个半径为2的硬币覆盖。把桌面和硬币的尺度都缩小一倍,那么,长、宽各是原桌面一半的小桌面,就可以用n个半径为1的硬币覆盖。那么,把原来的桌子分割成相等的4块小桌子,那么每块小桌子都可以用n个半径为1的硬币覆盖,因此,整个桌面就...

数学中的“迭代法”是什么啊?有什么用?
根据这个规律,可以归纳出下面的递推公式: u n = u n - 1 × 2 (n ≥ 2) 对应u n 和 u n - 1 ,定义两个迭代变量 y 和 x ,可将上面的递推公式转换成如下迭代关系: y=x*2 x=y 让计算机对这个迭代关系重复执行 11 次,就可以算出第 12 个月时的兔子数。参考程序如下: cls x=1 for i=2...

下面( )项有可能是43n的个位数字,其中n为正整数
【答案】:A 尾数只与底数的个位有关系,所以31尾数为3,32尾数为9,33尾数为7,34尾数为1。不可能出现5,故本题正确答案选A。

编写程序求:给出一个整数n,一个数组{a1,a2,...,an},将n表示成数组中若...
int chose[6]={-1,-1,-1,-1,-1,-1};decompose( a,5,0,10,chose,0);void print( int *chose , int n ){ for( int i = 0 ; i < n ; ++i )printf("%d\\t",chose[i]);printf("\\n");} \/\/参数分别是,背包数组,数组最大下标,当前选到的第k个元素,要求解的和,已...

世界上真的有未解答的数学题吗?
一个看起来很简单的定理这个定理的内容是有关一个方程式 x2 + y2 =z2的正整数解的问题,当n=2时就是我们所熟知的毕氏定理(中国古代又称勾股弦定理):x2 + y2 =z2,此处z表一直角形之斜边而x、y为其之两股,也就是一个直角三角形之斜边的平方等於它的两股的平方和,这个方程式当然有整数解(其实有...

matrixpermanent是什么意思?
矩阵永久,记作Permanent,是一个矩阵的特殊性质表示。对于一个 n × n 矩阵 A,其永久被定义为所有可能排列的乘积之和。具体地,可以表示为 Per(A) = Σ a_{i1}a_{i2}...a_{in},其中的 i 取值范围是 {1, 2, ..., n},且满足 i1 ≠ i2 ≠ ... ≠ in。与矩阵行列式 ...

相似回答