【算法】(持续更ing)

1-1 圆柱体的表面积

输入底面半径r和高h,输出圆柱体的表面积,保留3位小数,格式见样例。

样例输入:

3.5 9

样例输出:

Area = 274.889

【分析】

圆柱体的表面积由3部分组成:上底面积、下底面积和侧面积。

由于上下底面积相等, 完整的公式可以写成:表面积=底面积×2+侧面积。

根据几何知识,底面积=πr^2,侧面积 =2πrh。不难写出完整程序:

#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=2*pi*r*r;                //上下底面的面积
	s2=2*pi*r*h;                //侧面的面积
	s=s1+s2;                    //总面积
	printf("Area=%.3f\n",s);    //以三位小数输出面积
	return 0;                    //返回值为0
}

1-2 三位数反转
输入一个三位数,分离出它的百位、十位和个位,反转后输出。
样例输入:
127
样例输出:
721
【分析】
首先将三位数读入变量n,然后进行分离。

百位等于n/100(注意这里取的是商的整数部 分),

十位等于n/10%10(这里的%是取余数操作),

个位等于n%10。程序如下:

#include <stdio.h>
int main()
{
	int n,m;
	scanf("%d",&n);
	m=(n%10)*100+(n/10%10)*10+(n/100);
	printf("%03d\n",m);    //输出一个数值变量,不足3位在前面补0
	return 0;
}

1-2-1 四位数反转

#include <stdio.h>
int main()
{
	int n,m;
	scanf("%d",&n);
	m=(n%10)*1000+(n/100%10)*100+(n/10%10)*10+(n/1000);
	printf("%04d\n",m);
	return 0;
}

题1-3 交换变量
输入两个整数a和b,交换二者的值,然后输出。
样例输入:
824 16
样例输出:
16 824
【分析】
方法1:按照题目所说,先把输入存入变量a和b,然后交换。如何交换两个变量呢?最经典的方法是三变量法

#include <stdio.h>
int main()
{
	int a,b,t;    //定义临时变量t
	scanf("%d%d",&a,&b);
	t=a;
	a=b;
	b=t;
	printf("%d %d\n",a,b);
	return 0;
}

方法2:不借助任何变量,类似“倒酱油”

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

1-4 鸡兔同笼
已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡的数目和兔的数目。如 果无解,则输出No answer。
样例输入:
14 32
样例输出:
12 2
样例输入:
10 16
样例输出:
No answer
【分析】
设鸡有a只,兔有b只,则a+b=n,2a+4b=m,联立解得a=(4n-m)/2,b=n-a。 在什么情况下此解“不算数”呢?首先,a和b都是整数;其次,a和b必须是非负的。可以通过 下面的程序判断:

#include <stdio.h>
#include <math.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\n");
	else
		printf("%d %d\n",a,b);
	return 0;
}

1-5 三整数排序
输入3个整数,从小到大排序后输出。
样例输入:
20 7 33
样例输出:
7 20 33
【分析】

#include <stdio.h>
#include <math.h>
int main()
{
	int a,b,c,t;
	scanf("%d%d%d",&a,&b,&c);
	if(a > b) { t = a; a = b; b = t; } //执行完毕之后a≤b  
	if(a > c) { t = a; a = c; c = t; } //执行完毕之后a≤c,且a≤b依然成立  
	if(b > c) { t = b; b = c; c = t; }  
	printf("%d %d %d\n", a, b, c); 
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_23996157/article/details/82594194
今日推荐