C语言——《算法竞赛入门》习题分享

#学习记录#

目录

习题1-1 平均数(average):

习题1-2 温度(temperature):

习题1-3 连续和(sum):

习题1-4 正弦和余弦(sincos):

习题1-5 距离(distance):

习题1-6 偶数(odd):

习题1-7 打折(discount):

习题1-8 绝对值(abs):

习题1-9 三角形(triangle):

习题1-10 年份(year):


前提:题目源自《算法竞赛入门》第一章,作者刘汝佳,仅作题目思路分享,如有错误或侵权,烦请联系本人删除,谢谢

习题1-1 平均数(average):

        输入3个整数,输出它们的平均值,保留3位小数。

#include <stdio.h>
int main()	//习题1-1 平均数
{
	int a, b, c;
	scanf("%d %d %d", &a, &b, &c);
	printf("%.3f", (a + b + c) / 3.0);
	return 0;
}

        非常基础的一道题,注意题目要求的格式,做好占位符的使用。

习题1-2 温度(temperature):

        输入华式温度,输出对应的摄氏温度c,保留3位小数。提示:c-5(f32)/9。

#include <stdio.h>
int main()	//习题1-2 温度
{
	int a;
	scanf("%d", &a);
	printf("%.3f", 5.0 * (a - 32) / 9.0);
	return 0;
}

        利用好提示给的华氏度转温度的公式,注意计算的先后顺序还有题目要求的格式。

习题1-3 连续和(sum):

        输入正整数 n,输出 1+2+…+n的值。提示:目标是解决问题,而不是练习编程。

#include <stdio.h>
int main()	//习题1-3 连续和
{
	int n;
	int sum = 0;
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
		sum += i;
	printf("%d", sum);
	return 0;
}

  思路:设一个值来积累值,用一个for循环来使值不断变大,sum += i 等价 sum = sum + i。

习题1-4 正弦和余弦(sincos):

        输入正整数n(n<360),输出n度的正弦、余弦函数值。提示:使用数学函数。

#include <stdio.h>
#include <math.h>
int main()	//习题1-4 正弦和余弦
{
	int n;
	scanf("%d", &n);
	printf("正弦是:%f\n", sin(n));
	printf("余弦是:%f\n", cos(n));
	return 0;
}

        这道题应用了两个数学函数,引用头文件不要忘记。三角函数使用弧度而非角度,题目没有要求类型也应该选择浮点数类型。

习题1-5 距离(distance):

        输入4个浮点数 x,y1,x2,y,输出平面坐标系中点(x1y1)到点(x2,2)的距离。

#include <stdio.h>
#include <math.h>
int main()	//习题1-5 距离
{
	float x1, y1, x2, y2;
	scanf("%f %f %f %f", &x1, &y1, &x2, &y2);
	printf("%f\n",sqrt(pow(x2-x1,2)+pow(y2-y1,2)));
	return 0;
}

        这道题同样引用了两个数学函数,分别是sqrt(求平方根)和pow(求平方),先对两个坐标进行声明,再利用数学的两点间距离公式来求出结果。

习题1-6 偶数(odd):

        输入一个整数,判断它是否为偶数。如果是,则输出“yes”,否则输出“no”。提示:可以用多种方法判断。

#include <stdio.h>
int main()	//习题1-6 偶数
{
	int a;
	scanf("%d", &a);
	if (a % 2 == 0)
		printf("yes");
	else
		printf("no");
	return 0;
}

习题1-7 打折(discount):

        一件衣服 95 元,若消费满300元,可打八五折。输入购买衣服件数,输出需要支付的金额(单位:元),保留两位小数。

#include <stdio.h>
int main()	//习题1-7 打折
{
	float coat = 95.0;
	int count;
	scanf("%d", &count);
	if (coat * count >= 300)
		printf("%.2f", coat * count * 0.85);
	else
		printf("%.2f", coat * count);
	return 0;
}

理清思路,做好格式和判断这道题还是简单的。

习题1-8 绝对值(abs):

        输入一个浮点数,输出它的绝对值,保留两位小数。

#include <stdio.h>
int main()	//习题1-8	绝对值
{
	float a;
	scanf("%f", &a);
	if (a > 0)
		printf("%.2f", a);
	else
		printf("%.2f", -a);
	return 0;
}

        这题有两种情况记得区分开来

习题1-9 三角形(triangle):

        输入三角形三边长度值(均为正整数),判断它是否能为直角三角形的三个边长。如果可以,则输出“yes”,如果不能,则输出“no”。如果根本无法构成三角形,则输出“not a triangle”。

#include <stdio.h>
int main()	//习题1-9 三角形
{
	int a, b, c,max;    //设初始值
	scanf("%d %d %d", &a, &b, &c);    //通过输入函数赋值
	max = a;    //设a为初始最大值
	if (a + b > c && a + c > b && b + c > a) 
   //利用三角形两边之和一定大于第三边,判断三边长是否可以拼成三角形,如果可以拼成进入下列计算
	{
		if (max > b && max > c)    //判断a是否最大
			a = 0;                  //如果a最大,清空a
		else if (b > max && b > c)    //如果b是最大
		{
			max = b;        //将b赋给max
			b = 0;          //清空b
		}
		else
		{
			max = c;       //a,b都不是最大,那最大就是c,把c赋给max
			c = 0;          //清空c  
		}
		if ((a * a + b * b + c * c) == max * max)    //计算勾股定理是否满足,前面的判断最大是为了这个不用判断哪一条是斜边,清空是为了不用找另外两条直角边
			printf("yes");    //满足打印yes
		else
			printf("no");     //不满足打印no
	}    //三边长不满足第一个if直接打印Not
	else
		printf("not a triangle");
		
	return 0;
}

        这题做法其实不是很好,是因为我想尽可能的化简,这种写法也可能只适合这种题。

习题1-10 年份(year):

        输入年份,判断是否为闰年。如果是,则输出“yes”,否则输出“no”。提示:简单地判断除以4的余数是不够的。

int main()	//习题1-10 年份
{
	int year;
	scanf("%d", &year);
	if (year % 4 == 0 && year % 100 != 0)
		printf("no");
	else if(year % 400 == 0)
		printf("no");
	else
		printf("no");
	return 0;
}
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值