码迷,mamicode.com
首页 > 编程语言 > 详细

算法竞赛入门经典(第二版) - 第二章 思考题及习题

时间:2015-06-12 00:49:53      阅读:537      评论:0      收藏:0      [点我收藏+]

标签:

题目1(必要的储存量)

  • 输入一些数,统计个数。(无需数组)
  • 输入一些数,求最大值、最小值和平均数。(无需数组)
  • 输入一些数,哪两个数最接近。(需要数组)
  • 输入一些数,求第二大的值。(无需数组)
  • 输入一些数,求它们的方差。(需要数组)
  • 输入一些数,统计不超过平均数的个数。(无需数组)

题目2(统计字符1的个数)

  1. maxn设置的值过大,系统很可能无法分配如此大的内存。
  2. 判断语句应该改为if (s[i] == ‘1‘),1是数值,‘1‘是字符。
  3. 使用string.h头文件的下的strlen函数但未包含此头文件。

     编译器将给出警告warning: implicit declaration of function `strlen‘

  4. for循环的判断表达式i < strlen(s)每次判断时都需要调用strlen函数,导致效率损失。

 修改后的程序:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define N 65536
 4 int main(void)
 5 {
 6     char s[N];
 7     scanf("%s", s);
 8     int tot = 0, len = strlen(s);
 9     for (int i = 0; i < len; i++)
10         tot += (1 == s[i]) ? 1 : 0;
11     printf("%d\n", tot);
12     return 0;
13 }

 习题3-1 得分(Score)

 1 #include <stdio.h>
 2 #include <string.h>
 3 int main(void)
 4 {
 5     int n;
 6     char s[81];
 7     scanf("%d", &n);
 8     for (int i = 0; i < n; i++) {
 9         scanf("%s", s);
10         int sum = 0, flag = 0, len = strlen(s);
11         for (int j = 0; j < len; j++) {
12             flag += (s[j] == O) ? 1 : -flag;
13             sum += (flag) ? flag : 0;
14         }
15         printf("%d\n", sum);
16     }
17     return 0;
18 }

习题3-2 分子量(Molar Mass)

算法竞赛入门经典(第二版) - 第二章 思考题及习题

标签:

原文地址:http://www.cnblogs.com/untitled/p/4570350.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!