美文网首页
算法:一道简单的改错题

算法:一道简单的改错题

作者: yehkong | 来源:发表于2018-09-19 15:19 被阅读0次

在算法竞赛书中有这样一道思考题:

///统计字符串中数字1的个数
#include <stdio.h>
#include <string.h>

#define maxn 10000000 + 10

int main(int argc, const char * argv[]) {
    char s[maxn];
    scanf("%s",s);
    int tot = 0;
    for (int i = 0; i < strlen(s); i++)
        if (s[i] == 1) tot++;
        printf("%d\n",tot);
    return 0;
}

该程序至少有3个问题,其中一个导致程序无法运行,另一个导致结果不正确,还有一个导致销量低下。

在xcode中把这个段代码码上,编译可以通过,运行出错。

这三个问题我想是这样的:


1.png

问题1. 数组的维数太大,这个是跟操作系统的堆栈有关吧,不同的平台不同。往上改到的最大值我没去尝试,这里改到100.
问题2. 循环判断中每次都要调用strlen(s),这个可以提到循环起前面去计算,提高效率
问题3. 字符'1'的ascii不是数字1而是49,所以应该把区别字符'1'和数字1.

改后的代码:

#define maxn 100 + 10

int main(int argc, const char * argv[]) {
    char s[maxn];
    scanf("%s",s);
    int tot = 0;
    unsigned long len = strlen(s);
    for (int i = 0; i < len; i++)
        if (s[i] == '1') tot++;
        printf("%d\n",tot);
    return 0;
}

另外的写法:

int main(int argc, const char * argv[]) {
    int tot = 0;
    char ch;
    while((ch = getchar()) != '\n')
        if(ch == '1') ++tot;
    printf("%d\n", tot);
}

相关文章

  • 算法:一道简单的改错题

    在算法竞赛书中有这样一道思考题: 该程序至少有3个问题,其中一个导致程序无法运行,另一个导致结果不正确,还有一个导...

  • 一道简单的算法题

    我们每周有技术分享会,今天有道算法跟大家分享下。 我说说我知道的三种思路 先剔除N,再找出最大值 这种方式要for...

  • 一道简单的算法题

    题目:统计给定数字中,值为1的二进制位的数量。如果是数组呢? 解法1:遍历算法 第一种想法比较简单,从最后一位开始...

  • 一道简单的算法题

    已知A,B坐标,且A为圆心,求圆与AB连线的交点坐标

  • 每日算法(两数之和、两数相加)-11.12

    今天开始记录每天学习一道两道的算法题,由简入难。今天一共学习了两道算法,一道简单一道中等,分别为两数之和、两数相加...

  • 一道简单的算法题(1)

    问题 给定一个二维正数数组,如下。从任意一个点出发,求最长递增长度。假如从下标(0,1),即数字2出发,则最长递增...

  • 一道淘汰85%面试者的百度开发者面试题

    最近在网上上看到一道题,据说淘汰了85%的面试者(只是据说而已)。心血来潮,随便写个算法,该算法很简单,主要就...

  • RSA 加密算法主要公式

    从一道计算题开始了解 RSA 非对称加密算法的主要公式。 计算问题 下面是一道关于 RSA 计算的问题,比较简单,...

  • RSA 加密算法主要公式 - 草稿

    从一道计算题开始了解 RSA 非对称加密算法的主要公式。 计算问题 下面是一道关于 RSA 计算的问题,比较简单,...

  • 记字节前端面试一道简单的算法题

    记字节前端面试一道简单的算法题 70. 爬楼梯[https://leetcode-cn.com/problems/...

网友评论

      本文标题:算法:一道简单的改错题

      本文链接:https://www.haomeiwen.com/subject/hgixnftx.html