刘汝佳《算法竞赛入门经典(第二版)》第一章习题
习题1-1 平均数
输入3个整数,输出它们的平均值,保留3位小数。
#include <cstdio>
int main (void)
{
int a,b,c;
scanf ("%d%d%d",&a,&b,&c);
printf ("%.3f",(double)(a+b+c)/3);
return 0;
}
习题1-2 温度
输入华氏温度f,输出对应的摄氏温度c,保留3位小数。提示:c=5(f-32)/9。
#include <cstdio>
int main (void)
{
double f;
scanf ("%lf",&f);
printf ("%.3f",5.0*(f-32.0)/9.0);
return 0;
}
习题1-3 连续和
输入正整数n,输出1+2+…+n的值。
#include <cstdio>
int main (void)
{
int n,sum = 0;//sum要记得赋初值
scanf ("%d",&n);
for (int i = 1; i <= n; i++)
sum += i;
printf ("%d",sum);
return 0;
}
习题1-4 正弦和余弦
输入正整数n(n<360),输出n度的正弦、余弦值。
解析:这道题要求输入的值是角度值,而求正余弦的函数的参数都是弧度,因此要先按照转换公式 弧度=180÷π×角度 把角度转换成弧度。
#include <cstdio>
#include <cmath>
const double pi = acos(-1.0);
int main (void)
{
int n;
double rad;
scanf ("%d",&n);
rad = ((double)n)*180.0/pi;
printf ("%.3f %.3f",sin(rad),cos(rad));
return 0;
}
习题1-5 打折
一件衣服95元,若消费满300元,打八五折。输入购买衣服的件数,输出需要支付的金额(单位:元),保留两位小数。
#include <cstdio>
int main (void)
{
int n;
double sum;
scanf ("%d",&n);
(n*95.0 >= 300.0)?sum = n*95.0*0.85: sum = n*95;
printf ("%.2f\n",sum);
return 0;
}
习题1-6 三角形
输入三角形3条边的长度值(均为正整数),判断是否能为直角三角形的3条边长。如果可以,输出yes,如果不能,输出no。如果根本无法构成三角形,则输出no a triangle。
解析:这一题需要将输入的边长进行排序以便判断能否构成三角形以及能否构成直角三角形。
#include <cstdio>
int main (void)
{
int s[3];
scanf ("%d%d%d",&s[0],&s[1],&s[2]);
sort (s,s+3);
if (s[0]+s[1] > s[2])
if (s[0]*s[0]+s[1]*s[1] == s[2]*s[2])
printf ("yes");
else
printf ("no");
else
printf ("not a triangle");
return 0;
}
习题1-7 年份
输入年份,判断是否为闰年。如果是,则输出yes,否则输出no。提示:简单地判断除以4的余数是不够的。
解析:如提示所说,闰年要满足2个条件:1.能被4整除 2.如果年份是100的倍数还要求能被400整除。
#include <cstdio>
int main (void)
{
int y;
scanf ("%d",&y);
((y%400 != 0 && y%100 == 0) || y%4 != 0)?printf ("no"):printf ("yes");
return 0;
}