前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >算法竞赛(一)

算法竞赛(一)

作者头像
Gorit
发布2021-12-09 15:33:13
2160
发布2021-12-09 15:33:13
举报
文章被收录于专栏:Gorit 带你学全栈系列

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

目录

一、圆柱体的表面积

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

三、 变量交换

四、鸡兔共笼

五、三整数排序

一、圆柱体的表面积

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

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

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

样例:

3.5 9

Area = 274.889

代码语言:javascript
复制
#include
#include
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

源代码

代码语言:javascript
复制
#include
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

代码语言:javascript
复制
#include
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

代码语言:javascript
复制
#include
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也一定为偶数

代码语言:javascript
复制
#include
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

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

代码语言:javascript
复制
#include
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;
 } 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/01/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、圆柱体的表面积
  • 二、给一个三位数,讲其逆序输出
  •  三、 变量交换
  • 四、鸡兔共笼
  • 五、三整数排序
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档