求流程图 一个正整数有可能可以被表示为n(n>=2)个连续正整数之和 流程图流程图流程图!!!
这个问题看起来不是很简单,需要设计一个算法:
先讲数学:
设:
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
void main()
{
int input,i,n,flag;
float a;//等差数列的首项不一定为整数
flag=0;
printf("输入判断的整数:
");
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("
");
flag++;//flag记录满足要求的数列数
}
}
if(flag==0) //flag初始为0,通过上面的循环,如果有满足的在则不为0,为0则说明不能写成等差数列
printf("%d不能被表示成n连续正整数之和
",input);
}
#include "stdio.h"
int main()
{
int n;
int i,j,k,s;
printf("输入一个数:");
scanf("%d",&n);
s=0;
k=1;
for(i=1;i<=n/2+1;i++)
{
s=s+i;
if(s==n)
{
s=0;
for(;s<n;i--)
{
s=s+i;
}
s=0;
for(i=i+1;s<n;i++)
{
s=s+i;
printf("%d+",i);
}
printf("\b=%d
",n);
k=k+1;
i=k;
s=0;
}
else
{
if(s>n)
{
k=k+1;
i=k;
s=0;
}
}
}
}
(使用循环嵌套结构,共内外两个循环。)
里面的那个循环负责不断试探:
从2个连续整数的累加值(该组连续值从某个整数值a开始),到n个连续整数累加值是否等于n。比如:从试探1+2开始,然后试探1+2+3,然后1+2+3+4,一直试探到1+2+3+……+n。(此时该组连续值是从1开始的,即a=1。)连续整数用高斯求和公式,不用再构建循环结构。
外面那个循环负责控制初始值a。每次里面那个循环试探完成后,外面这个循环使得a+1。比如:假如之前已试探完从1开始和从2开始的所有的连续值序列的集合,那么这个循环使得a+1,此时a为3,进入里面的循环,开始试探以3为初始值的连续值序列的集合。
这种方式是助于理解。其实算法可以优化为单个循环结构。
陈沫倍司: 设待测数据为n (使用循环嵌套结构,共内外两个循环.) 里面的那个循环负责不断试探:从2个连续整数的累加值(该组连续值从某个整数值a开始),到n个连续整数累加值是否等于n.比如:从试探1+2开始,然后试探1+2+3,然后1+2+3+4...
湖南省17717686875: 一个正整数有可能可以被表示为 n(n>=2) 个连续正整数之和?
陈沫倍司: //=== #include <stdio.h> //-- void fun(int n) {int i,j,k,m,flag=0;for(i=1;i<n;i++){k=0;for(j=i;j<n;j++){k+=j;if(k>=n)break;}if(k==n){for(m=i;m<=j;m++)printf("%d ",m);printf("\n");flag=1;}}if(flag==0)printf("NONE"); } //--- void main()...
湖南省17717686875: 20、一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如: 15=1+2+3+ - ?
陈沫倍司: 完美立方体的三个边的边长分别为9、12、20.对角线为25
湖南省17717686875: 用vfp解决:一个正整数有可能可以被表示为n(n>=2)个连续正整数之和 - ?
陈沫倍司: 新建个表单,在表单里加一个text1,edit1,command1 command1命令代码:LOCAL p,t,b p=thisform.text1.value &&先设定文本框是数值型 IF pMESSAGEBOX("请输入一个正整数",48,"系统提示") RETURN endif thisform.edit1.Value="...
湖南省17717686875: 谁能帮设计一个程序,找出这样的数啊??
陈沫倍司: 用2个for循环就可以轻松搞定,你自己试试呗.学计算机编程一定要自己亲手实践的,加油!
湖南省17717686875: 怎么判断一个正整数是否为素数 流程图 - ?
陈沫倍司: 1、首先,打开Clion,在指定的位置创建一个Project.点击File->New Project. 2、这里选择工程的存储路径,并输入工程名,使用c++11标准,会默认创建一个main.cpp. 3、首先创建一个头文件,声明判断是否为素数的函数.在项目上右...
湖南省17717686875: 输入一个整数有可能被表示为n(n>=2)个连续的正整数之和:?
陈沫倍司: #include "stdio.h" void main() { int i,j,k,x,m; scanf("%d",&x); for(i=1;i<=x/2;i++) { m=x; for(j=i;j<=x/2+1;j++) { m=m-j; if(m==0) { printf("%d=%d",x,i); for(k=i+1;k<=j;k++) printf("+%d",k); printf("\n"); break; } } } }
湖南省17717686875: 分别用流程图和伪代码描述法来判断正整数是奇数还是偶数的算法(一个计算机作业,确实不会做,求大神帮忙 - ?
陈沫倍司: 流程图: ,其中判断条件是:余数是0;伪代码:输入:正整数X IF X/2=0 THEN 输出 X是偶数;ELSE 输出 X是奇数;END IF END 打码不容易望采纳...
湖南省17717686875: 设计算法流程图,输出1000以内能被3和5整除的所有正整数. - ?
陈沫倍司:[答案] 凡是能被3和5整除的正整数都是15的倍数,由于1000=15*66+10,因此1000以内一共有66个这样的正整数.下面开始设计流程图:
湖南省17717686875: 输出如下图所示的由 n 行 * 组成的图形(你考虑n可能是任何一个整数)用word画一张流程图表示该算法 - ?
陈沫倍司: 流程图自己画吧,下面给你算法:1.令m=2n-1表示要输入的*数,令i=1,表示第几行.2、如果i小于等于n,则执行3,否则结束.3、输出2(i-1)个空格,输出m个*,之后m=m-2,i=i+1;之后返回步骤2.