当前位置:   article > 正文

算法竞赛(一)

算法竞赛(一)

算法竞赛的目的是找到解决问题的答案,不是比谁的答案更高级!!!

 

目录

一、圆柱体的表面积

二、给一个三位数,讲其逆序输出

三、 变量交换

四、鸡兔共笼

五、三整数排序


一、圆柱体的表面积

这个是中小学生都知道的的答案,底面积 x 2  加上 侧面积为表面积,我们令圆柱体的地面半径为r,高为h

则该圆柱体的表面积的表达为 PI * r * 2 + 2 PI * r 

问题描述:输入底面半径r,和高度h,输出圆柱的表面积,保留三位小数

样例:

3.5 9

Area = 274.889

  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5. const double pi = acos(-1.0);
  6. double r,h,s1,s2,s;
  7. scanf("%lf%lf",&r,&h);
  8. s1 = pi*r*r;
  9. s2 = 2*pi*r*h;
  10. s = s1*2+s2;
  11. printf("Area = %.3f",s);
  12. return 0;
  13. }

 这里要注明几点,const 关键字表明 PI 的值是不可改变的,这里的 pi 在真正的意义上属于一个常量,一般声明常量用const 关键字即可

double表示双精度浮点数,它能比float更加精准的表示小数点后面的数

 

二、给一个三位数,讲其逆序输出

示例:

样例输入

123

样例输出

321

 

源代码

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n;
  5. scanf("%d",&n);
  6. printf("%d%d%d",n%10,n/10%10,n/100);
  7. return 0;
  8. }

 

但是这样当我们输入120的是时候,电脑会输出021,虽然这么表达也感觉不像错的,但是这样并不符合数学的规范写法,如果这样,我们就必须判断  n%10  是否为0 ,但也有另一个办法,将输出得到的值存储到一个变量中,然后再用%d输出,如果还要输出025,%d 改为 %03d

 

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n,m;
  5. scanf("%d",&n);
  6. m = (n%10)*100 + (n/10%10)*10 +(n/100);
  7. printf("%d",m);//%d 改成 %03d即可得到和上述一样的结果
  8. return 0;
  9. }

 

 三、 变量交换

问题描述:输入两个数字,输出时将这两个数字的位置交换

示例

样例输入:

23 24

样例输出:

24 23

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int a,b;
  5. scanf("%d%d",&a,&b);
  6. printf("%d %d",b,a);
  7. return 0;
  8. }
  9. /*方法二
  10. a = a + b;
  11. b = a - b;
  12. a = a - b;
  13. 方法三
  14. a=a^b;
  15. b=a^b;
  16. a=a^b;
  17. 方法四
  18. int t;
  19. t = a;
  20. a = b;
  21. b = t;
  22. */

 这个交换数据的题目还有两种,一种使用指针,还有是用函数,在算法竞赛中,只要找到解决问题的办法,就是好方法

 

四、鸡兔共笼

问题描述:鸡和兔的数量有 n 只,总腿数 有 m,输入n,m,输出鸡的数目,兔的数目

示例

样例输入

14 32

样例输出

12 2

样例输入

10 16

样例输出

No answer

问题思考:我们假设鸡有 a 只,兔有 b 只,a + b = n,2a+4b = m,还有a和b都是整数并且大于0,还有兔和鸡的腿数都为偶数,所以m也一定为偶数

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int a,b,n,m;
  5. scanf("%d%d",&n,&m);
  6. a = (4*n-m)/2;
  7. b = n - a;
  8. if(m%2 == 1||a<0||b<0)
  9. printf("No answer");
  10. else
  11. printf("%d %d\n",a,b);//a is chicken,b is rabbit
  12. return 0;
  13. }

 

五、三整数排序

问题描述: 输入三个整数,将其从小到大排序

 示例

样例输入:

13 22 21

样例输出

13 21 22

问题思考:三个数字进行排序,有一种中间情况,当我们输入的三个数字恰好都相同呢?其实在判断条件中加入相等就可以了,我就直接把代码放出来就好了

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int i,j,k,t;
  5. scanf("%d%d%d",&i,&j,&k);
  6. if(i>j)
  7. {
  8. t = i;
  9. i = j;
  10. j = t;
  11. }
  12. if(i>k)
  13. {
  14. t = i;
  15. i = k;
  16. k = t;
  17. }
  18. if(j>k)
  19. {
  20. t = j;
  21. j = k;
  22. k = t;
  23. }
  24. printf("%d %d %d\n",i,j,k);
  25. return 0;
  26. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/728709
推荐阅读
相关标签
  

闽ICP备14008679号