zoukankan      html  css  js  c++  java
  • P1980【洛谷】 计数问题 解题报告

      "

              无奈没在洛谷刷过题,只能从水题做起……

                                                                                                           "

    【传送门:http://www.luogu.org/problem/show?pid=1980】

    <!———————————下面是原题—————————————————————————————-->

    P1980 计数问题

    • 题目提供者lyx613
    • 标签 模拟 2013 NOIp普及组
    • 难度 入门难度

     题目描述

    试计算在区间 1 到 n 的所有整数中,数字 x(0 ≤ x ≤ 9)共出现了多少次?例如,在 1

    到 11 中,即在 1、2、3、4、5、6、7、8、9、10、11 中,数字 1 出现了 4 次。

    输入输出格式

    输入格式:

    输入文件名为 count.in。

    输入共 1 行,包含 2 个整数 n、x,之间用一个空格隔开。

    输出格式:

    输出文件名为 count.out。

    输出共 1 行,包含一个整数,表示 x 出现的次数。

    输入输出样例

    输入样例#1:
    11 1
    输出样例#1:
    4

    说明

    对于 100%的数据,1≤ n ≤ 1,000,000,0 ≤ x ≤ 9。
    <!———————————————解题过程—————————————————————————-->

    LZ刚开始的想法

    //这是LZ刚开始的代码只拿了30分【错误代码】--------------------------------------------
    program WA; var
      n,x,data,i:integer;
      temp,ans:string;
      t1:char;
    begin
      read(n,x);//读入数据
      for i:= 1 to n do
        begin
          str(i,temp);//将每个数转为字符串
          ans:=ans+temp;//将转换得到的字符串加到ans里
        end;
      t1:=chr(x+48);//用字符表示数字X
      for i:= 1 to length(ans) do
        if ans[i]=t1 then inc(data);//一个个对比,若找到就递增data
      writeln(data);
    end.
    //-----------------------------------------------------------------------------------------

      这个想法有个缺陷,就是如果n太大导致ans这个字符串太长就会超出string的范围,或许可以用ansistring,但是直接一个数一个数的分析不是更好吗,而且还能降低不必要的时间和空间上的浪费。

      于是就有了下面这个题解……

    //下面是正确代码-----------------------------------------------------------------------
    program accepted;
    var
      n,x,i,j,ans:longint;
      temp:string;
    begin
      readln(n,x);
      for i:=1 to n do
      begin
        str(i,temp);//转换为字符串方便计算
        for j:=1 to length(temp)do//一位一位比较
          if ord(temp[j])-48 =x//求每一位的ascII码,-48变数字,
            then inc(ans);//出现一次加一次
      end;
      writeln(ans);//输出出现次数
    end. //---------------------------------------------------------------------------------------

      艰难的AC了道水题——(*/ω\*)

     -----------------------------------------------------------------------------------------------------------

    本文作者的博客园:http://www.cnblogs.com/tonylim/


    本文作者的CSDN博客:http://blog.csdn.net/happy_china1312

  • 相关阅读:
    实验 4:Open vSwitch 实验——Mininet 中使用 OVS 命令
    实验 3:Mininet 实验——测量路径的损耗率
    软工第一次作业
    实验2:Mininet实验——拓扑的命令脚本生成
    实验 1:Mininet 源码安装和可视化拓扑工具
    AU降噪处理
    软件测试,Homework3
    软件测试,Lab1
    软件测试,Homework2
    node.js,同时访问出错,Can't set headers after they are sent
  • 原文地址:https://www.cnblogs.com/bobble/p/5710941.html
Copyright © 2011-2022 走看看