《算法竞赛入门经典》习题——Chapter 1

习题1-1 平均数(average)

题目:输入3个整数,输出他们的平均值,保留3位小数。

分析:主要考察的是C语言打印函数(printf)的输出格式。

C中格式字符串的一般形式为: %[标志][输出最小宽度][.精度][长度]类型, 其中方括号[]中的项为可选项。各项的意义介绍如下:

表示输出类型的格式字符               格式字符意义
a                                                                浮点数、十六进制数字和p-计数法(C99)
A                                                                浮点数、十六进制数字和p-计数法(C99)
c                                                                 输出单个字符
d                                                                以十进制形式输出带符号整数(正数不输出符号)
e                                                                以指数形式输出单、双精度实数
E                                                                以指数形式输出单、双精度实数
f                                                                 以小数形式输出单、双精度实数
g                                                                以%f%e中较短的输出宽度输出单、双精度实数,%e格式在指数小于-4或者大  于等于精度时使用
G                                                                以%f%e中较短的输出宽度输出单、双精度实数,%e格式在指数小于-4或者大于等于精度时使用
i                                                                 有符号十进制整数(与%d相同)
o                                                                以八进制形式输出无符号整数(不输出前缀O)
p                                                                指针
s                                                                输出字符串
x                                                                 以十六进制形式输出无符号整数(不输出前缀OX)
X                                                                以十六进制形式输出无符号整数(不输出前缀OX)
u                                                                以十进制形式输出无符号整数

源码:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. // 习题1-1 平均数(average)  
  2.   
  3. #include <stdio.h>  
  4. int main(void)  
  5. {  
  6.     int a, b, c;  
  7.     double aver;  
  8.     scanf("%d%d%d", &a, &b, &c);  
  9.     aver = (a+b+c) / 3.0;  
  10.     printf("%.3lf\n", aver);  
  11.     return 0;  
  12. }  

习题1-2 温度(temperature)

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

分析:同上题,主要考察的是C语言打印函数(printf)的输出格式。

源码:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. // 习题1-2 温度(temperature)  
  2.   
  3. #include <stdio.h>  
  4. int main(void)  
  5. {  
  6.     float f, c;  
  7.     scanf("%f", &f);  
  8.     c = 5*(f-32)/9;  
  9.     printf("%.3f\n", c);  
  10.     return 0;  
  11. }  

习题1-3 连续和(sum)

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

分析:1+2+3=......+n = (1+n)*n/2

源码:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. // 习题1-3 连续和(sum)  
  2.   
  3. #include <stdio.h>  
  4. int main(void)  
  5. {  
  6.     int i, n, sum = 0;  
  7.     scanf("%d", &n);  
  8.     sum = (1+n)*n/2;  
  9.     printf("%d\n", sum);  
  10.     return 0;  
  11. }  

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

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

分析;考察的是数学函数的使用,注意角度和弧度的换算关系:180度 = pi * 1弧度。

源码:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. // 习题1-4 正弦和余弦(sin&cos)  
  2.   
  3. #include <stdio.h>  
  4. #include <math.h>  
  5. #define PI 3.1415926  
  6. int main(void)  
  7. {  
  8.     int n;  
  9.     double x;  
  10.     scanf("%d", &n);  
  11.     x = n*(PI/180.0);  
  12.     printf("%lf\n", sin(x));  
  13.     printf("%lf\n", cos(x));  
  14.     return 0;  
  15. }  

习题1-5 距离(distance)

题目:输入4个浮点数x1, y1, x2, y2,输出平面坐标系点(x1, y1)到点(x2, y2)的距离。

分析:1、平面直角坐标系中,两点间的距离公式为:根号下(|X1-X2|的平方+|Y1-Y2|的平方)。

            2、平方函数sqrt属于math.h文件中。

源码:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. // 习题1-5 距离(distance)  
  2.   
  3. #include <stdio.h>  
  4. #include <math.h>  
  5. int main(void)  
  6. {  
  7.     float x1, x2, y1, y2, dis;  
  8.     scanf("%f%f%f%f", &x1, &y1, &x2, &y2);  
  9.     dis = sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));  
  10.     printf("%f\n", dis);  
  11.     return 0;  
  12. }  

习题1-6 偶数(odd)

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

分析:偶数的判断方法。

源码:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. // 习题1-6 偶数(odd)  
  2.   
  3. #include <stdio.h>  
  4. int main(void)  
  5. {  
  6.     int n;  
  7.     scanf("%d", &n);  
  8.     if(n%2 == 0)  
  9.         printf("yes\n");  
  10.     else  
  11.         printf("no\n");  
  12.     return 0;  
  13. }  

习题1-7 打折(discount)

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

分析:if 的运用,easy。

源码:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. // 习题1-7 打折(discount)  
  2.   
  3. #include <stdio.h>  
  4. int main(void)  
  5. {  
  6.     int n, money;  
  7.     scanf("%d", &n);  
  8.     money = 95*n;  
  9.     if(money >= 300)  
  10.         money *= 0.85;  
  11.     printf("%d\n", money);  
  12. }  

习题1-8 绝对值(abs)

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

分析:if 运用,printf 输出格式。

源码:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. // 习题1-8 绝对值(abs)  
  2.   
  3. #include <stdio.h>  
  4. int main(void)  
  5. {  
  6.     float x;  
  7.     scanf("%f", &x);  
  8.     if(x>0)  
  9.         printf("%.2f\n", x);  
  10.     else  
  11.         printf("%.2f\n", -x);  
  12.     return 0;  
  13. }  

习题1-9 三角形(triangle) 

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

分析:if 嵌套使用。

源码:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. // 习题1-9 三角形(triangle)  
  2.   
  3. #include <stdio.h>  
  4. int main(void)  
  5. {  
  6.     int a, b, c;  
  7.     scanf("%d%d%d", &a, &b, &c);  
  8.     if(a+b>c && a+c>b && b+c>a)  
  9.     {  
  10.         if(a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a)  
  11.             printf("yes\n");  
  12.         else  
  13.             printf("no\n");  
  14.     }  
  15.     else  
  16.         printf("not a triangle\n");  
  17.     return 0;  
  18. }  

习题1-10 年份(year) 
题目:输入年份,判断是否为闰年。如果是,则输出“yes”,否则输出“no”。提示:简单地判断除以4的余数是不够的。

分析:if 嵌套使用,闰年的判断方法。

源码:

[cpp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. // 习题1-10 年份(year)  
  2.   
  3. #include <stdio.h>  
  4. int main(void)  
  5. {  
  6.     int n;  
  7.     scanf("%d", &n);  
  8.     if(n%4 == 0)  
  9.     {  
  10.         if(n%100 == 0 && n%400 != 0)  
  11.             printf("no\n");  
  12.         else  
  13.             printf("yes\n");  
  14.     }  
  15.     else  
  16.         printf("no\n");  
  17.     return 0;  
  18. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值