编程题:1.已知三角形的两边a.b及其夹角,求求第三边c及其面积s;2.用1分.2分.5分的硬币凑成300元以

问题描述:

编程题:1.已知三角形的两边a.b及其夹角,求求第三边c及其面积s;2.用1分.2分.5分的硬币凑成300元以
的人民币,求最少的硬币数目
以为是初学,请学出详细过程,正确格式
1个回答 分类:综合 2014-11-09

问题解答:

我来补答
请在tc下执行.
1.#include
#include
void main()
{
double a,b,angle,c,s;
printf("请输入两条边的长度和角的大小(数据以空格隔开):\n");
scanf("%lf %lf %lf",&a,&b,&angle);
if(!(a>0&&b>0&&angle>0))
{
printf("输入不能为负或者0!\n");
return;
}
c=sqrt(a*a+b*b-2*a*b*cos(angle));//余弦定理
s=0.5*a*b*sin(angle);//面积公式
printf("第三边长为%lf,面积为%lf\n",c,s);
}
2.思路如下:设1分x个,2分y个,5分z个,则x+2y+5z=30000
设x+y+z=k,依题意,即求k的最小值.移项,有x=k-y-z,带入上式得:k+y+4z=30000,因而k=30000-y-4z,显然x>=1,y>=1,z>=1.所以k-y-z>=1,即k>=1+y+z.这个条件是有用的,在编程实现时可以用来限制k.当然,还有一种方法,利用穷举法,令x,y,z都从1开始循环计数,再找到k,但效率没有这个思路实现的效率高,因为这里只有y和z的循环.由于要找最小的k,所以y和z都应该从大到小变化.可以令y=15000,z=3750开始,然后y,z依次减小(让z处在外循环,y处在内循环,这样k可以变化得慢些),直到第一个k>=1+y+z为止.具体代码如下:
#include
void main()
{
int y,z,k;//和上面的y,z,k对应
for(z=3750;z>0;z--)
for(y=15000;y>0;y--)
{
k=30000-y-4*z;
if(k>=1+y+z)
{
printf("最少的硬币数为:%d\n",k);
printf("具体分布是%d个1分,%d个2分,%d个5分\n",k-y-z,y,z);
return;
}
}
}
 
 
展开全文阅读
剩余:2000
上一页:周五
下一页:责任的事实论据
也许感兴趣的知识