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

题目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)

时间: 2024-08-08 05:38:12

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

算法竞赛入门经典(刘汝佳)课后习题前三章答案

本文转载: 第一章习题1-1#include <stdio.h>int main(){int a,b,c;double d;scanf("%d%d%d",&a,&b,&c);d=(double)(a+b+c);printf("%.3lf\n",d/3.0);return 0;} 习题1-2#include <stdio.h>int main(){int f;double c;scanf("%d",&

算法竞赛入门经典(第六章)

习题6-1,UVa673,Time:11.1 1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<string> 6 #include <stack> 7 using namespace std; 8 int main() { 9 int Case; 10 string str; 11 bool flag

《刘汝佳算法竞赛入门经典》第五章 高精度

Integer Inquiry 输入几行大整数, 求他们的和吗以0表示输入结束

《刘汝佳算法竞赛入门经典》第五章 数论

Skew Binary 斜二进制 斜二进制的每位为0, 或 1, 最低位可以为2. 第k位的...代表 2k+1 -1,给出一个斜二进制数,把他转换成十进制数.正常模拟就好 1 #include <cstdio> 2 #include <cstring> 3 char A[1000]; 4 5 int main() { 6 while (scanf("%s", A) != EOF) { 7 if (A[0] == '0') break; 8 int len =

《刘汝佳算法竞赛入门经典》第五章 排序检索

Master-MindHints

《刘汝佳算法竞赛入门经典》 第五章 字符串

Palindromes 几个if语句判断一下就好了

算法竞赛入门经典_第七章 暴力求解法_7.2枚举排列:生成1~n的排列

版权所有,欢迎转载,转载请注明出处,谢谢 生成1~n的排列 递归思想:先输出所有以1开头的排列(这一步是递归调用),然后输出以2开头的排列(这一步是递归调用),接着是以3开头的排列······最后才是以n开头的排列. //vs2012测试代码 #include<iostream> using namespace std; void print_permutation(int n, int* A, int cur) { if(cur==n)//递归边界 { for(int i=0; i<n

《刘汝佳算法竞赛入门经典》第五章 简单几何计算

The Other Two Trees 另两棵树 没看懂题目,搜了下题解,都是直接给出了简化后的题意和解法...自己再读读原题意吧

《算法竞赛入门经典》第三章 3.1

程序 3-1 #include<stdio.h>#define MAXN 100 + 10int a[MAXN];int main(){ int i, x, n = 0; while(scanf("%d, &x") == 1) a[n++] = x; for(i = n-1; i>=1; i--) { printf("%d ", a[i]); } printf("%d\n", a[0]); return 0;}

算法竞赛入门经典题解——第三章 3-4 周期串UVa455

思路:遍历可能的周期,比较s[k]与s[k%i](其中i为周期) #include <stdio.h> #include <stdlib.h> #include<string.h> int main() { int T; char s[90]; scanf("%d",&T); while(T--){ scanf("%s",s); int len,i; len=strlen(s); for(i=1;i<=len;i++