1145. 简单游戏(easygame)

    xiaoxiao2025-05-15  10

      1145. 简单游戏(easygame) 

    题目描述

    一天,小R准备找小h去游泳,当他找到小h时,发现小h正在痛苦地写着一列数,123…n,于是就问小h痛苦的原因,小h告诉他,现在他要算1..n这些数里面,1出现的次数是多少,如n=11的时候,有1,10,11共出现41,现在给出n,你能快速给出答案么?

    输入

    一行,就是n,(1<=n<=maxlongint)

    输出

    一个整数,表示1..n1出现的次数。

    样例输入

    11

    样例输出

    4

    思路:

    这题找规律,代码如下:

    var s,s1,s2:string; i,x,x1,n,j:longint; ans:int64; begin assign(input,'easygame.in');reset(input); assign(output,'easygame.out');rewrite(output); readln(s); s:='0'+s; for i:=length(s) downto 2 do begin n:=1; if (i<>length(s)) then begin s1:=copy(s,1,i-1); s2:=copy(s,i+1,length(s)-i+1); for j:=1 to length(s)-i do n:=n*10; val(s1,x); val(s2,x1); x:=x+1; if (s[i]='0') then begin x1:=0;dec(x);end; if (s[i]='1') then ans:=ans+x*n-(n-x1-1) else ans:=ans+x*n; end; if i=length(s) then begin s1:=copy(s,1,length(s)-1); val(s1,x); ans:=ans+x+1; if s[i]='0' then dec(ans); end; end; writeln(ans); close(input);close(output); end.
    转载请注明原文地址: https://ju.6miu.com/read-1298931.html
    最新回复(0)