《算法竞赛入门经典》习题答案 -- Chapter I

习题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                 以十进制形式输出无符号整数
更多的说明可以看 这里

程序:
C语言: Codee#26459
01 #include <stdio.h>
02
03 int main()
04 {
05     int a = 0;
06     int b = 0;
07     int c = 0;
08
09     scanf( "%d %d %d" , & a , &b , & c);
10     printf( "%.3lf \n " , ( a + b + c) / 3.0); /* type conversion */
11
12     return 0;
13 }

习题1-2 温度(temperature)

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

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

程序:

C语言: Codee#26460
01 #include <stdio.h>
02
03 int main ()
04 {
05     float f = 0;
06     float c = 0;
07
08     scanf( "%f" , & f);
09     c = 5 * ( f - 32) / 9;
10     printf( "%.3lf \n " , c);
11
12     return 0;
13 }

习题1-3 连续和(sum)

题目:输入正整数n,输出1 + 2 + ... + n的值

分析:这个就没什么好分析的了吧?高斯定理或者循环相加都可以的。

程序:

C语言: Codee#26461
01 #include <stdio.h>
02
03 int main()
04 {
05     int i = 0;
06     int n = 0;
07     int sum = 0;
08
09     scanf( "%d" , &n);
10     for ( i = 1; i <= n; i ++)
11     {
12         sum += i;
13     }
14     printf( "%d \n " , sum);
15
16     return 0;
17 }

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

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

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

注意:如果使用gcc编译,那么在编译的过程中会出现这种错误:undefined reference to `cos' 和undefined reference to `sin'。这是因为头文件math.h需要额外的链接库,gcc默认编译的时候是没有的。解决方法是:gcc test.c -lm -0 test 其中,lm的意思就是link math

程序:

C语言: Codee#26462
01 include < stdio . h >
02 #include <math.h>
03
04 #define pi 4.0 * atan(1.0)
05
06 int main()
07 {
08     int n = 0;
09
10     scanf( "%d" , &n);
11     if (n > 360)
12     {
13         printf( "No answer. \n ");
14         return 0;
15     }
16     printf( "sin = %lf, cos = %lf \n " , sin((n * pi) / 180 ), cos((n * pi) / 180));
17
18     return 0;
19 }


习题1-5 距离(distance)

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

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

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

程序:

C语言: Codee#26463
01 #include <stdio.h>
02 #include <math.h>
03
04 int main()
05 {
06     double x1 = 0;
07     double y1 = 0;
08     double x2 = 0;
09     double y2 = 0;
10     double distance = 0;
11
12     scanf( "%lf %lf %lf %lf" , & x1 , & y1 , & x2 , & y2);
13     distance = sqrt(( x1 - y1) * ( x1 - y1) + ( x2 - y2) * ( x2 - y2));
14     printf( "%lf \n " , distance);
15
16     return 0;
17 }


习题1-6 偶数(odd)

题目:输入一个整数,判断它是否为偶数。如果是,则输出"yes",否则输出"no"

分析:too simple, sometimes naive

程序:

C语言: Codee#26464
01 #include <stdio.h>
02
03 int main()
04 {
05     int n = 0;
06
07     scanf( "%d" , &n);
08     if (n % 2 == 0)
09     {
10         printf( "yes \n ");
11     }
12     else
13     {
14         printf( "no \n ");
15     }
16
17     return 0;
18 }


习题1-7 打折(discount)

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

分析:同上

程序:

C语言: Codee#26465
01 #include <stdio.h>
02
03 #define DISCOUNT 0.85
04 #define PRICE 95.0
05 #define CONDITION 300
06
07 int main()
08 {
09     int n = 0;
10     double sum = 0;
11
12     scanf( "%d" , n);
13     sum = PRICE * n;
14     if ( sum >= CONDITION)
15     {
16         sum *= DISCOUNT;
17     }
18     printf( "%.2lf \n " , sum);
19
20     return 0;
21 }

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值