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

 

目录

一、圆柱体的表面积

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

三、 变量交换

四、鸡兔共笼

五、三整数排序


一、圆柱体的表面积

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

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

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

样例:

3.5 9

Area = 274.889

#include<stdio.h>
#include<math.h>
int main()
{
	const double pi = acos(-1.0);
	double r,h,s1,s2,s;
	scanf("%lf%lf",&r,&h);
	s1 = pi*r*r;
	s2 = 2*pi*r*h;
	s =  s1*2+s2;
	printf("Area = %.3f",s);
	return 0;
 } 

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

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

 

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

示例:

样例输入

123

样例输出

321

 

源代码

#include<stdio.h>
int main()
{
	int n;
	scanf("%d",&n);
	printf("%d%d%d",n%10,n/10%10,n/100);
	return 0;
 } 

 

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

 

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

 

 三、 变量交换

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

示例

样例输入:

23 24

样例输出:

24 23

#include<stdio.h>
int main()
{
	int a,b;
	scanf("%d%d",&a,&b);
	printf("%d %d",b,a);
	return 0;
 } 
 
 /*方法二
a = a + b;
b = a - b;
a = a - b;

方法三
a=a^b;
b=a^b;
a=a^b; 

方法四
int t;
t = a;
a = b;
b = t; 
*/

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

 

四、鸡兔共笼

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

示例

样例输入

14 32

样例输出

12 2

样例输入

10 16

样例输出

No answer

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

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

 

五、三整数排序

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

 示例

样例输入:

13 22 21

样例输出

13 21 22

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

#include<stdio.h>
int main()
{
	int i,j,k,t;
	scanf("%d%d%d",&i,&j,&k);
	if(i>j)
	{
		t = i;
		i = j;
		j = t;
	}
	if(i>k)	
	{
		t = i;
		i = k;
		k = t;
	}
	if(j>k)
	{
		t = j;
		j = k;
		k = t;
	}
	printf("%d %d %d\n",i,j,k);
	return 0;
 }