C++:编写一个程序,求刚好满足以下条件的最小的n:12+22+32+…+n2>=1000 (提示:运行正确时n为14)
2个回答
展开全部
该题有两种解法
一种是先数学上化简问题 然后求解,该方法编程 程序效率高(时间和或空间)
第二种是搜索法或称穷举法,该方法比较直接,但程序效率比较低。对于模型很难化简得问题可以采用。或是编程练习。
第一种:
Sn=12+22+32+42+...+n2为数列an=10n+2的前n项和
Sn=10*[n*(n+1)]/2+2n=5n^2+7n
Sn>=C 即 Sn=5n^2+7n>=C
求解 不等式 可得
n<=[-7-sqrt(7^2+20*C)]/10 (舍去 负数)
或
n>=[-7+sqrt(7^2+20*1000)]/10
因此 计算不小于 [-7+sqrt(7^2+20*1000)]/2 的整数可得到问题的解
#include <iostream.h>
#include <math.h>
int main()
{
int C;
int n;
cout<<"请输入一正整数 :";
cin>>C;
float nx=(-7.+sqrt(49.+20.*C))/10.;
if(nx==int(nx)){
n=int(nx);
}else{
n=int(nx)+1;
}
cout<<"满足Sn = 12+22+32+...+n2 < "<<C<<" 的最小 n 是"<<n<<endl;
}
第二种方法穷举法
#include <iostream.h>
//#include <math.h>
int main()
{
int C;
int n;
int Sn=0;
do{
cout<<"请输入一正整数 :";
cin>>C;
if(C>=1)break;
cout<<"输入错误"<<endl;
}while(1);
n=0;
do{
n++;
Sn += n*10+2;
}while(Sn<C);
cout<<"满足Sn = 12+22+32+...+n2 < "<<C<<" 的最小 n 是"<<n<<endl;
}
补充的问题:
#include <stdio.h> //使用 sprintf( )
#include <string.h> //使用 strlen( )
#include <iostream.h>
int main()
{
unsigned int ui;
char t[20];
cout<<"请输入";
cin>>ui;
sprintf(t,"%d",ui);
int i=0;
int j=strlen(t)-1;
while(i<j){
char tmp;
tmp=t[i];
t[i]=t[j];
t[j]=tmp;
i++;j--;
}
cout<<"整数"<<ui<<"的反序是"<<t<<endl;
}
一种是先数学上化简问题 然后求解,该方法编程 程序效率高(时间和或空间)
第二种是搜索法或称穷举法,该方法比较直接,但程序效率比较低。对于模型很难化简得问题可以采用。或是编程练习。
第一种:
Sn=12+22+32+42+...+n2为数列an=10n+2的前n项和
Sn=10*[n*(n+1)]/2+2n=5n^2+7n
Sn>=C 即 Sn=5n^2+7n>=C
求解 不等式 可得
n<=[-7-sqrt(7^2+20*C)]/10 (舍去 负数)
或
n>=[-7+sqrt(7^2+20*1000)]/10
因此 计算不小于 [-7+sqrt(7^2+20*1000)]/2 的整数可得到问题的解
#include <iostream.h>
#include <math.h>
int main()
{
int C;
int n;
cout<<"请输入一正整数 :";
cin>>C;
float nx=(-7.+sqrt(49.+20.*C))/10.;
if(nx==int(nx)){
n=int(nx);
}else{
n=int(nx)+1;
}
cout<<"满足Sn = 12+22+32+...+n2 < "<<C<<" 的最小 n 是"<<n<<endl;
}
第二种方法穷举法
#include <iostream.h>
//#include <math.h>
int main()
{
int C;
int n;
int Sn=0;
do{
cout<<"请输入一正整数 :";
cin>>C;
if(C>=1)break;
cout<<"输入错误"<<endl;
}while(1);
n=0;
do{
n++;
Sn += n*10+2;
}while(Sn<C);
cout<<"满足Sn = 12+22+32+...+n2 < "<<C<<" 的最小 n 是"<<n<<endl;
}
补充的问题:
#include <stdio.h> //使用 sprintf( )
#include <string.h> //使用 strlen( )
#include <iostream.h>
int main()
{
unsigned int ui;
char t[20];
cout<<"请输入";
cin>>ui;
sprintf(t,"%d",ui);
int i=0;
int j=strlen(t)-1;
while(i<j){
char tmp;
tmp=t[i];
t[i]=t[j];
t[j]=tmp;
i++;j--;
}
cout<<"整数"<<ui<<"的反序是"<<t<<endl;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
# include <iostream>
using namespace std;
void abc(int,int);
int main()
{
int s,m=0,i;
for(i=1;i<=1000;i++)
{
m+=i*10+2;
if(m>1000) break;
}
cout<<i<<endl;
system("pause");
}
# include <iostream>
using namespace std;
main()
{
int n;
cin>>n;
while(n)
{
cout<<n%10;
n=n/10;
}
system("pause");
}
using namespace std;
void abc(int,int);
int main()
{
int s,m=0,i;
for(i=1;i<=1000;i++)
{
m+=i*10+2;
if(m>1000) break;
}
cout<<i<<endl;
system("pause");
}
# include <iostream>
using namespace std;
main()
{
int n;
cin>>n;
while(n)
{
cout<<n%10;
n=n/10;
}
system("pause");
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询