几个小程序中的问题~进来看看

a64311937 2009-04-27 11:30:00
//程序设计题1:编写程序把一元钱全兑换成5分、2分、1分硬币。并且画出N-S图。
#include<iostream.h>
void main()
{
int a ,b,c; //a,b,c分别代表5分、2分、1分硬币的个数
for (a=0;a<101;a++){
for(b=0;b<101;b++){
for(c=0;c<101;c++){
if ((5*a+2*b+c) ==100) {
cout<<"一元钱可以被分为"<<a<<"个五分,"<<b<<"个两分,"<<c<<"个一分."<<endl;
} } }} }
!!!!这题我的计算结果是有的~ 计算的结果不全~ 你们可以自己运行一下看看~就知道了 怎么才能把计算的结果补全呢??



//程序设计题2:利用格里高利公式编写程序求π。
// π/4=1-1/3+1/5-1/7+……
//直到最后一项的值小于10-6为止。并且画出N-S图。
#include<iostream.h>
void main()
{ double p=0.0;
int n=1;
do {
p=p+(1/(2*n-1))-(1/(2*n+1));
n++;
} while (1/(2*n-1)>=0.000001);


cout<<"π的值是"<<p*4.0<<endl;
}
!!!!这题我过程应该是对的~但是它结果去整了~~ 我已经double p 了怎么还不能计算出精确的结果啊~



//程序设计题3:
// 编写程序,求分数序列:2/1,3/2,5/3,8/5,13/8,21/13……
// 的前50项制之和的程序,并且画出N-S图。。

#include<iostream.h>
void main()
{ int m=2,n=1;
float sum=0.0;
int a;
for(a=1;a<51;a++)
{sum=sum+m/n ;
m=m+n;
n=m;}
cout<<"前50项的和是"<<sum<<endl;
}
!!!!此题编译正确~但是为什么出现程序运行终止啊?




//程序设计题5:题目:有一个整数n,将n分解成若干个整数之和,
// 问如何分解能使这些数的乘积最大,输出这个乘积m。例如:n=12
//(1)分解为1+1+1+…+1,12个1, m=1*1*1……*1=12
//(2)分解为2+2+…+2,6个2, m=26=64
//(3)分解为3+3+3+3,4个3, m=34=81
//(4)分解为4+4+4,3个4, m=43=64
//(5)分解为6+6,2个6, m=62=36
//(6)分解为5+7, m=5*7=35
//(7)分解为4+8, m=4*8=32
//显然,3最好。
!!!还有这题~~我完全没有头绪~~希望高手帮帮我啊~
...全文
302 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
a64311937 2009-05-04
  • 打赏
  • 举报
回复
第一题还是不对啊~~没有全解~
郁闷找不出问题在哪里~~
继续等待~
songxinSQL 2009-04-28
  • 打赏
  • 举报
回复
谢楼上的提醒,当时没注意看。现在仔细看来我的算法有问题。
beyond071 2009-04-28
  • 打赏
  • 举报
回复
7楼的第4题思路很巧妙,但是并不是正确解答啊!
不断二分的结果是有问题的,例如分解21,正解应为3的7次方,为2187。而你的程序会将其分成2和3的组合,值为1944!
songxinSQL 2009-04-28
  • 打赏
  • 举报
回复
1.

楼主你的好像每次都多了一次循环吧?我感觉应该这样:
#include <iostream>
using namespace std;
void main()
{
int a ,b,c;
int sum=0;
for (a=1;a <101;a++)
{
for(b=1;b <101;b++)
{
for(c=1;c <101;c++)
{
if ((5*a+2*b+c) ==100)
{
cout <<"一元钱可以被分为" <<a <<"个五分,"
<<b <<"个两分," <<c <<"个一分." <<endl;
sum++;
}
}
}
}
cout<<sum;
}
2.你的循环条件有问题

#include <iostream>
#include <cmath>
using namespace std;
void main()
{
float pi=0,t=1;
int n=1;
while(fabs(t*1.0/n)>1e-6)
{
pi=pi+t/n;
n=n+2;
t=-t;
}
printf("%f",pi*4);
}
3.你的算法有问题,分母是自增的

#include <iostream>
using namespace std;
void main()
{
double i=1,j=2,sum=0;
for(int n=0;n<50;n++)
{
sum=sum+j/i;
j+=i;
i++;
}
cout<<sum<<endl;
}
4.

#include <iostream>
using namespace std;
int sum;
void f1(int n)
{
int x,y;
x=n/2;
y=n-x;
if (n>=x*y)
{
cout<<n<<endl;
sum*=n;
}
else
{
f1(x);
f1(y);
}
}

void main()
{
int n;
sum=1;
cin>>n;
f1(n);
cout<<sum<<endl;
}
beyond071 2009-04-28
  • 打赏
  • 举报
回复
第3题

float m=2.0f,n=1.0f; //m和n用float型
float sum=0.0f;
int a;
float temp;//使用中间变量装m,n = m在上一条中m已经被修改,这样比值一直是1
for(a=1;a <51;a++)
{
sum=sum+m/n;
temp = m;
m=m+n;
n=temp;
}
cout <<"前50项的和是" << sum <<endl;
xiehui3651 2009-04-28
  • 打赏
  • 举报
回复
第三题

#include <iostream.h>
void main()
{
int m=2,n=1;
float sum=0.0;
int a;
for(a=1;a <51;a++)
{
int temp;
sum=sum+(float)m/n;
temp = m;
m=m+n;
n = temp;
}
cout <<"前50项的和是" <<sum <<endl;
}
beyond071 2009-04-28
  • 打赏
  • 举报
回复
第2题中 你的n在表达式中是在括号中,所以优先算出,所以被取整了。可以如下修改

double n = 1.0;//第3行
n += 1.0;//第6行
xiehui3651 2009-04-28
  • 打赏
  • 举报
回复
第二题算法写的有问题应该是:

do {
p=p+(1.0/(2*n-1))-(1.0/(2*n+1));
n++;
n++; //n应该加2
} while (1.0/(2*n-1)>=0.000001);
xiehui3651 2009-04-28
  • 打赏
  • 举报
回复
第一题有全解啊
liliangbao 2009-04-27
  • 打赏
  • 举报
回复
帮顶~

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧