1126 数字统计

2010年NOIP全国联赛普及组

时间限制: 1 s

空间限制: 128000 KB

题目等级 : 白银 Silver

 

 

 

 

问题叙述 Description

求统计有给定范围[L, R]的持有整数中,数字2涌出的次数。

随给定范围[2,
22],数字2在勤2中出现了1次等,在三番五次12着冒出1次等,在多次20蒙起1不成,在屡次21遇出现1次于,在频繁22丁冒出2次,所以数字2每当拖欠限量外累计出现了6次。

数范围 1 ≤ L ≤ R≤ 10000。

输入描述 Input Description

输入共1 行,为片个正整数L 和R,之间用一个空格隔开。

出口描述 Output Description

输出共1 行,表示数字2 出现的次数。

样例输入 Sample Input

2 22

样例输出 Sample Output

6

数据范围与提示 Data Size & Hint

 

代码的颜值很要紧

分类标签 Tags 接触之展开

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int tot=0;
 5 int main()
 6 {
 7     int l,r;
 8     scanf("%d%d",&l,&r);
 9     for(int i=l;i<=r;i++)
10     {
11         int p=i;
12         while(p!=0)
13         {
14             if(p%10==2)
15             tot++;
16             p=p/10;
17         }
18     }
19     printf("%d",tot);
20     return 0;
21 }

 


_流淌:正文中之援是直引用作者Bob大叔的话,两长达横线中间的段子的凡我好的意见,其他大约都可算笔记了。
_


打立等同节的首先段落就是会看出来,Bob大叔对格式化是可怜注重的,他连正在用了几乎只破比句来说明代码的格式化对于一个工程作为一个一体化的要。所有的代码—不论是一个丁不同时代写的代码,还是一个团不同之积极分子写的代码—都应该是平的、优雅的。

怎么要格式化

代码的格式化直接影响至「使用代码沟通」的问题,而「使用代码沟通」是一个正规的开发者的率先要务,而未是「只要会让代码能运行起来就是实施」。

乃今天写的意义或尽快从此便见面得吃改成,但是代码的「可读性」将见面指向「未来代码的改要重构」产生深远的影响。

连通下去是有针对性「使用代码沟通」能力产生影响的点:

笔直方向上之格式化

垂直方向及之格式化简单说哪怕是代码的长度。

咱俩于支付的过程被应该尽量错开追写有比较小之代码源文件,作者为有了一个参考值是:「大部之文本应该还自愧不如200实践,最丰富之文件最好要低于500履」。但是笔者吧说这长长的规则不应该成为一个硬性的专业,而是我们于付出过程被连追求的程度。毕竟有时我们不可避免地要写来有比丰富的源文件。

1. 报章的比喻

一个源于文件读起来应当像报纸里的文章一样,名字该简短但能达文章的主干意思,源文件碰巧开头之片相应能够提供一些高层的悬空和算法,然后实际的贯彻细节在连接下的章遭遇逐一展开,直到源文件之最终,在那里我们能找到最低级的函数和极致细节之实现。

同等摆报纸(一个品类)会有诸多篇章(源文件)组成,大多数都分外紧缺,偶尔发生一些聊有几长,极少数的场面呢会见面世占整个页面的长短的稿子。

2. 不一定义中的垂直间隔

在来源文件中不同之概念(往往因的凡函数)之间应当使空行来隔开,这样以读者读书这段代码时见面十分畅快。

3. 直聚集

跟达同一修被论述的始末刚刚相反,相似或相关性较强的定义中多次不应当发分隔(往往是注释,或者是抽象的空行),而相应聚集于合。

4. 垂直距离

咱常会面碰到这种状态,我们涉猎代码时迷路在了寻「变量和变量间、函数和函数间、类及类似中的涉及」的进程中腐败,大量之时刻花在了探寻「那段代码在哪」。

看似之概念应该在垂直距离上尽量接近,相似之概念应该尽可能存叫与一个函数(除非你有较好之缘故不错过这么做),protected的变量应该被禁止采取(这漫漫可能于一些语言里不有)。

变量的概念 应该尽量靠近它吃运用的地方。

实例变量(instance variable)
(类的动态变量)应该受定义在类的开始。

任凭是依照「剪刀原则」,将实例变量定义在类的最低端,还是根据Java的老办法,将实例变量定义在类的最好顶端,都是好的。但求不要拿实例变量放在除了就半栽之外的外职位。

来依靠关系之函数
应该以笔直的偏离达到尽量靠近,而且一再调用者应该于吃调用者的上面(如果可能的语句)。

概念上干比较密切的代码
应该依据他们干之绵密程度来选择他们中间的相距

5. 笔直排序

垂直坐标上之要素(可能是代码块,函数,变量等)应该以自上而下的翻阅顺序进行排,这样又易于阅读。

水平方向上之格式化

作者对于有些榜首的采取(Junit, FitNesse, testNG, Time and Money,
JDepend, Ant,
Tomcat)的尽的宽进行了统计,绝大多数之大幅度都在60单字符以下,大于80只字符以上增幅之占据比较死小。通常的游说,代码的行宽应该小于100要么120。

1. 品位的距离和汇

作者在这小节里说了一个于神秘的物—空格,因为一旦动用空格来区别水平方向上之差定义


//代码4-1
private void measureLine(String line) { 
    lineCount++;
    int lineSize = line.length();
    totalChars += lineSize;             
    lineWidthHistogram.addLine(lineSize, lineCount);        recordWidestLine(lineSize);
}

于档次方向达成,作者主张以强相关的要素中无采用空格,而当弱相关的元素中添加空格来与分别,比如代码4-1。

  • 赋值语句之横是个别独界别很充分之有,那么用空格来突出赋值操作符(就是=
    )并对准赋值语句之左右零星片段加以区分。
  • 函数称以及左括号中是殊息息相关的,所以便非以空格
  • 参数之间的逗号分隔符之后采取空格,用以突出分隔符并区别两单不同参数。
2. 品位对伙同

稍微人(包括Bob大叔自己最初)喜欢在起相同堆放的变量定义或赋值语句时,使用对一头来如代码变得还易读,但如此是从来不用底。使用这样的对齐会喧宾夺主,把代码阅读者的阅读重点吸引到了错的地方。

//代码4-1
public class FitNesseExpediter implements ResponseSender 
{
    private     Socket            socket;
    private     InputStream      input;
    private     OutputStream        output;
    private     Request          request;
    private     Response            response;
    private     FitNesseContext  context; 
    protected   long                requestParsingTimeLimit;
    private     long                requestProgress;
    private  long               requestParsingDeadline;
    private  boolean             hasError;

    public FitNesseExpediter(Socket              s,
                             FitNesseContext    context) throws Exception
    {
        this.context =            context;
        socket =                    s;
        input =                  s.getInputStream();
        output =                   s.getOutputStream();
        requestParsingTimeLimit =   10000;

    }

若是您的代码中出现了异常丰富的变量定义或赋值语句列表,长暨得采取不当对伙同来如它又易于读,那么重大问题应有是君的代码中莫应当出现这样丰富的变量定义或赋值列表,而不是缺乏了错对一头

3. 缩进

根源文件里之始末与其说是「提纲和内容」的干,不如说是「层级」关系。

每当代码中,要传达的消息中的直属关系自文本到类、类及艺术、方法及代码块、代码块及后码块,逐级为生,为了区别这种层级,开发者非常喜欢用代码的缩进来若代码更加易读。


*缩进
是代码质量管理里生重要的同样围绕,我个人于欣赏使用制表符(TAB,往往是4单空格)来标识缩进,然而我产生个同学即使特意好以2独空格来表示缩进,这种事情仁者见仁智者见智。*


毫无毁掉缩进(统计breaking indentation)。谨记一定要是利用缩进。
奇迹一个if语句或者for循环代码块或者函数非常小,开发者会以为无需利用缩进,而把大括声泪俱下,执行语句等都勾于同一行,如代码4-4受所显示,这种是必须使避的。

//代码4-3
public class CommentWidget extends TextWidget {
    public static final String REGEXP = "^#[^\\r\\n]*(?:(?:\\r\\n)|\\n|\\r)?";
    public CommentWidget(ParentWidget parent, String text){super(parent, text);}
    public String render() throws Exception {return ""; } 

}
4. 空语句

自个人非常不喜欢空语句子,并且于开进程中是碰头竭力避免用空语句之,如果我只得动用它,也得会助长大括哀号又采用缩进来给代码更爱读。

集团规则(Team Rules)

万一一个档是一个集团一起开发,那么团队中之每个人且使按部就班这团队自然下来的格式化要求,来保证一个类别被之格式是顺滑的、一致的。

自之博客