#学习记录#
目录
前提:题目源自《算法竞赛入门》第一章,作者刘汝佳,仅作题目思路分享,如有错误或侵权,烦请联系本人删除,谢谢
习题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;
}