ACM练习1

1.1实验题目(1004)

拉里今年毕业,终于找到了工作。他赚了很多钱,但似乎从来没有足够的。拉里决定,他需要抓住他的财务组合,解决他的融资​​问题。第一步是弄清楚他的钱到底是怎么回事。拉里有他的银行账户报表,想看看他有多少钱。通过编写程序帮助拉里从过去12个月的每个月结算余额,并计算他的平均账户余额。

2.需求分析

通过编写程序帮助拉里从过去12个月的每个月结算余额,并计算他的平均账户余额。

(1)  输入的形式和输入值的范围:连续输入120.2精度double数据,输入范围随意

(2)  输出形式:美元符合 数据 $ x

(3)  程序所达的功能:十二个月期末余额的平均值(平均值)并四舍五入到最近的一分钱

(4)  测试数据:输入100.00489.12 12454.12 1234.10 823.05 109.20 5.27 1542.25 839.18 83.99 1295.011.75  输出 $ 1581.42

3.概要设计

For循环连续入12个数据 并求其平均数输出时 使其保留小数点后两位数

4.用户使用说明

连续输入12个有效数据,回车结束

5.测试结果

6.附录

#include<stdio.h>

voidmain()

{

    int i;

    double s=0,x;

    for(i=0;i<12;i++)

    {

       scanf("%lf",&x);

       s+=x;

    }

    printf("$%.2lf\n",s/12);

}

 


2.1实验问题(2546)

你的任务是编写一个程序,它给出了两个圆圈,计算小数点后三位数的精度的交点面积。

1.  需求分析

给出两个圆 判断两圆相交的面积两圆的情况分别有 1 相离和相切 2 内含 3相交 需要给出的数据 并且判断它们的关系 进而求出面积

(1)  输入的形式和输入值的范围:输入6个double型数据 输入一个用空格隔开 输入范围 x,y数据随意 但是r必须大于0

(2)  输出形式:输出一个小数点后三位数的精度的数据

(3)  程序所达到的功能:计算两圆相交的面积

(4)  测试数据:输入 20.0 30.0 15.040.0 30.0 30.0 输出608.366

2.  概要设计

用结构体 定于x y 点 再用一个结构体定义圆和半径  在单行输入文件中有空格分隔的实数x1 y1 r1 x2 y2 r2。它们代表两个圆的中心坐标和半径。 定义一个函数用来求圆心距用来和两圆半径和,差做比较

3.  用户使用说明

连续输入6个数据  按顺序排列表达的意思是  x1 y1 r1 x2 y2r2 代表两个圆的圆心和半径 输入完毕后 回车即可 可以连续输入 除非程序出错

4.  测试结果

5.  附录

#include<iostream>

#include<cstdio>

#include<cmath>

usingnamespace std;

constdouble PI = 3.141592653;

structpoint//点

{

    double x,y;

};

structcircle//圆

{

    point center;

   double r;

};

doubledist(point a,point b)//求圆心距

{

     returnsqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));

}

intmain()

{

    circle a,b;

 while(scanf("%lf%lf%lf%lf%lf%lf",&a.center.x,&a.center.y,&a.r,&b.center.x,&b.center.y,&b.r)!=EOF)

  {

       double area;

       double length=dist(a.center,b.center);

       if (length >= a.r + b.r)

         area= 0;

       else if (length <= fabs(a.r - b.r)) {

         double r = a.r < b.r ? a.r : b.r;

         area= PI * r * r;

       }

       else

       {

 

        doubled1=2*acos((a.r*a.r+length*length-b.r*b.r)/(2*a.r*length));//求两扇形圆心角

        doubled2=2*acos((b.r*b.r+length*length-a.r*a.r)/(2*b.r*length));

        doublearea1=a.r*a.r*d1/2-a.r*a.r*sin(d1)/2;   //根据圆心角求扇形面积,减去三角形面积,得到相交部分面积

        doublearea2=b.r*b.r*d2/2-b.r*b.r*sin(d2)/2;//扇形面积:S=PI*r*r*θ/(2*PI)  三角形面积:S=1/2*a*c*sin(B)

        area=area1+area2;

       }

        printf("%.3lf\n",area);

}

return 0;

}

 

3.1实验问题

减色是从一组离散的颜色映射到一个较小的颜色。这个问题的解决方案要求你在标准的二十四位RGB颜色空间中执行这样的映射。输入包括16RGB颜色值的目标集合,以及要映射到目标集合中最接近颜色的任意RGB颜色的集合。对于我们的目的,RGB颜色被定义为有序三元组(RGB),其中三元组的每个值是从0255的整数。两种颜色之间的距离被定义为两个三维之间的欧几里得距离点。也就是说,给定两种颜色(R1G1B1)和(R2G2B2),它们的距离D由等式 



1.   需求分析

主要是比较两个D的大小 D的大小接近则就是答案可以先设定一个最小值然后循环香相减得D 如果D小于最初的最小值则替换直到比较完则得出的答案就是最小值那就可以找到颜色相近的颜色了

(1)  输入的形式和输入值的范围:输入是RGB颜色的列表,每行一种颜色,指定为三个由一个空格分隔的从0到255的整数。前十六种颜色形成剩余颜色将被映射到的目标颜色组。输入由包含三个-1值的行终止。

(2)  输出的形式: (0,0,0) maps to (0,0,0)

(3)      程序所能达到的功:输出​​来自目标集的颜色和最接近的颜色

(4)      测试数据:  输入

0 0 0 

255 255 255

0 0 1

1 1 1

128 0 0

0 128 0

128 128 0

0 0 128

126 168 9

35 86 34

133 41 193

128 0 128

0 128 128

128 128 128

255 0 0

0 1 0

0 0 0

输出:(0,0,0) maps to (0,0,0)
2.  概要设计
列着创造3个数组从上到下 a[0]到a[15]存储16个数据 b,c数组也是用药的道理  然后再定义三个int 数据  与前16个已经储存好的数据 进行比较 首先先定义一个最小值 D  然后输入的数据与前16个数据进行过比较 如果D比min小 则进行交换数据 并且记录那3个数据的下标  
3.  用户使用说明
先输入 16行的三个数据 这是用于 16个之后输入的数据进行比较 寻找颜色相近的数据 输入3个 -1 时 程序结束
4.  测试结果
 

5. 附录

#include<stdio.h>

#include<math.h>

int main()

{

 inti,k,R[16],G[16],B[16],a,b,c;

 double temp,min;

 for(i=0;i<16;i++)scanf("%d%d%d",&R[i],&G[i],&B[i]); //循环连续输入16个颜色  用于对比的颜色组

 while(scanf("%d%d%d",&a,&b,&c),(a!=-1)&&(b!=-1)&&(c!=-1))//输入 需要对比的颜色组 输入3个-1时程序结束

 {

 min=sqrt((a-R[0])*(a-R[0])+(b-G[0])*(b-G[0])+(c-B[0])*(c-B[0]));//设定一个最小值

  k=0;

  for(i=1;i<16;i++)//寻找D最小的值并且记录好下标

  {

        temp=sqrt((a-R[i])*(a-R[i])+(b-G[i])*(b-G[i])+(c-B[i])*(c-B[i]));

         if(temp<min)

            min=temp,k=i;

  }

  printf("(%d,%d,%d)maps to (%d,%d,%d)\n",a,b,c,R[k],G[k],B[k]);

 }

 return 0;

}


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值