问题描述

编一程序求最大整数n及下列不等式左边的值,使得:
1+(1+2)+(1+2+3)+…+(1+2+3+…n)<=m (m为小于32768的正整数)。

输入

输入一个正整数m。(0<m<32768)

输出

一行,输出n的值。

题意:

对于一个给定的m,有这样的式子:1+(1+2)+(1+2+3)+…+(1+2+3+…n)<=m
求满足这个式子的最大整数n。
换言之,就是说给你一个跟n有关的求和式子,进行累加让他大于m,只要一大于m就输出这个n。

解法:

涉及到1到n不定量,所以需要循环结构,根据上面分析得到循环变量是从1到n的所以需要一个n次循环的循环结构,那么有循环那就想到循环体应该是啥呢,首先需要一个变量初始化为0的来记录总和,然后需要讲总和与m比较 是否得到答案,然后其中总和又是由循环变量累加的结果,那么问题就变成需要一个东西记录循环变量累加的结果,需要一个变量求总和的结果,需要比较总和m的if语句来判断是否当前循环变量是否达到n的条件。

参考代码:

#include<stdio.h>
int main()
{
int m,n,k=0,sum=0;//k存的是累加部分,sum存的是总和,n就是循环变量
scanf("%d",&m);
for(n=1;;n++){//不设置循环结束条件先
k+=n;
sum+=k;
if(sum>m){//当你得到循环变量n对应的当前总和之后 与m比较,当总和第一次大于m的时候这就是不满足条件的第一个n,那么满足条件的就是上一个n,所有n-1就是答案输出之后用break跳出循环
printf("%d",n-1);
break;
}
}
return 0;
}