Problem:1126 新建题解

Solution_ID:32913            弱鸡解题法

                   时间复杂度:Θ() 空间复杂度:Θ()

这里写#include <iostream>

#include<bits/stdc++.h>

using namespace std;


int main()

{

    int num[6];

    int a,b,time=0,x;

//初始化

    memset(num,0,sizeof(num));

    cin>>a>>b;

    for(int i=a; i<=b; i++)

    {

        x=0;

        for(int j=1;i/j!=0;j*=10,x++)

        {

            //取出每一位如果有一位含有2,time就+1

            num[x] = i/j%10;

            if(num[x]==2)

                time++;

        }

    }

    cout<<time<<endl;

    return 0;

}题解


by 86568 七月 19, 2019, 9:17 a.m.

Solution_ID:32912            弱鸡解题法

                   时间复杂度:Θ() 空间复杂度:Θ()

这里写题解


by 86568 七月 19, 2019, 9:15 a.m.

Solution_ID:32637            c语言的简单题解

                   时间复杂度:Θ() 空间复杂度:Θ()

#include<stdio.h>


int f(int n){

int ans = 0;

int temp = 0;             

    while(n > 0){                  

    temp = n % 10;               //对每一位数进行处理  , 把每个数字的最后一位孤立出来进行计算

    if(temp == 2){

    ans++;

}

n = n / 10;

}

return ans;

}

int main(void){

int L, R;

scanf("%d %d",&L, &R);

int ans = 0;

for(; L <= R; L++){

ans += f(L);

}

printf("%d",ans);

return 0;

}


by 89720 四月 9, 2019, 9:31 p.m.

Solution_ID:32617            我来水一波

                   时间复杂度:Θ() 空间复杂度:Θ()

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;


string tos(ll n)
{
    stringstream ss;
    ss<<n;
    string s;
    ss>>s;
    return s;
}//long long 转换为string类型


int main()
{
    string s;
    ll p,q,j,i,ans=0;
    cin>>p>>q;
    for(i=p; i<q+1; i++)
    {
        s=tos(i);
        for(j=0; j<s.size(); j++)
            if(s[j]=='2')ans++;
    }
    cout<<ans<<endl;
    return 0;
}

by 86165 四月 3, 2019, 8:58 p.m.

Solution_ID:32414            水

                   时间复杂度:Θ() 空间复杂度:Θ()

#include <iostream>

#include <cmath>

using namespace std;


int main(void)

{

    int l,r,i,sum=0,j;

    cin >> l >> r;

    for(i=l;i<=r;i++)

    {

        int a,b,c,d,k=0;

        d=i;

        while(d)

        {

            k+=1;

            d=d/10;

        }

        c=i;

        while(k!=1)

        {

            a=c%10;

            b=c/pow(10,k-1);

            if(a==2)

                sum++;

            if(b==2)

                sum++;

            c=c-a-b*pow(10,k-1);

            k--;

        }

        if(c==2)

            sum++;

    }

    cout << sum << endl;

    return 0;

}



by 65649 一月 31, 2019, 9:34 p.m.

Solution_ID:30189            归纳法

                   时间复杂度:Θ(与长度有关) 空间复杂度:Θ(你懂得)

其实那个pow()可以打表,不过打不打表对速度影响不大

#include <iostream>

#include <cmath>

#include <string>

#include <sstream>

using namespace std;

int Num(int num) {

string nums;

stringstream mystr;

mystr << num, mystr >> nums, mystr.clear();

int sum, a[2] = { 0 }, size = nums.length();

for (int i = size; i >= 1; i--) {

int mypow = pow(10, size - i);

int t = nums[i - 1] - 50;

sum = a[i % 2] = a[(i + 1) % 2] + mypow / 10 * (t + 2)*(size - i) + 

(t >= 1) * mypow + !t*(num % mypow + 1);

}

return sum;

}

int main()

{

int t, t1;

cin >> t >> t1;

cout << ((t *= --t >= 0) >= (t1 *= t1 >= 0) ? 0 : Num(t1) - Num(t)) << endl;

return 0;

}


by 48097 十一月 16, 2017, 3:42 p.m.

Solution_ID:29992            wc这题暴力直接ac(数据水水)

                   时间复杂度:Θ() 空间复杂度:Θ()

var

  l,r,i,j,ans:longint;

  s:string;

begin

  read(l,r);

  for i:=l to r do

  begin

    str(i,s);

    for j:=1 to length(s) do

      if s[j]='2' then inc(ans);

  end;

  write(ans);

end.


by 54948 十一月 4, 2017, 11:05 a.m.

Solution_ID:29048            直接法 vs 骚方法

                   时间复杂度:Θ() 空间复杂度:Θ()

//当r的长度达到8位以上,且l和r的差距极大时

//quick方法能快速求解

//slow方法将耗费至少10sec

#include <iostream>
#include <cmath>
#define For(i,a,b) for(int i=a;i<b;i++)
using namespace std;

inline int Nine(int n) {
 int cur = 1, multi = 0;
 while (n--) {
  cur = cur * 10 + 9;
  multi *= 10;
 }
 return cur + multi; //199...
}

void preCal(int x, int* a, int* b) {
 int cur = 0;
 a[0] = 0; b[0] = 1;
 int multi = 1, i = 0;
 while (cur < x) {
  cur = cur * 10 + 9;
  //计算下一个cur的参数
  a[i+1] = 9 * a[i] + b[i];
  multi *= 10;
  b[(++i)] = a[i] + multi;
 }
 //i将会等于 x的位数+1
}

//0~x 之间2的个数
int quick(int x, int *a, int *b) {
 int cur = 0, sum = 0, i = 0;
 //eg, x=2345, x/=100 得x=23, 定义_x=45
 int mod = 0, _x = 0;
 while (x>0) {
  mod = x % 10;
  if (mod < 2) cur = mod*a[i];
  if (mod > 2) cur = (mod - 1)*a[i] + b[i];
  if (mod == 2)
   cur = quick(Nine(i), a, b) + 1 + _x;
  sum += cur;
  _x += int(mod*pow(10, i));
  x /= 10; i++;
 }
 return sum;
}

int slow(int l, int r) {
 int mod, big, count = 0;
 For(i, l, r + 1) {
  big = i;
  while (big) {
   mod = big % 10;
   if (mod == 2) count++;
   big /= 10;
  }
 }
 return count;
}

int main() {
 int l, r;
 while (cin >> l >> r) {
  int len = 0, copy = r;
  while (copy > 0) {
   copy /= 10; len++;
  }
  int *a, *b;
  a = new int[len + 1];
  b = new int[len + 1];

  preCal(r, a, b);
  cout << quick(r, a, b) - quick(l - 1, a, b) << endl;
  //cout << slow(l, r) << endl;
  delete[] a, b;
 }
 return 0;
}


by 50881 八月 31, 2017, 10:42 p.m.

Solution_ID:28907            So Easy

                   时间复杂度:Θ( n) 空间复杂度:Θ(n)

#include<cstdio>

int L,R,ans;

int main()

{

    scanf("%d%d",&L,&R);

    for(int i=L;i<=R;++i)

        for(int j=i;j;j/=10)

            ans+=j%10==2;

    printf("%d\n",ans);

}


by 18594 八月 24, 2017, 5:44 p.m.

Solution_ID:25223            zkx

                   时间复杂度:Θ() 空间复杂度:Θ()

#include <iostream>


using namespace std;


int main()

{

    int a,b,c=0;

    cin>>a>>b;

    for(int i=a;i<=b;i++){

            int p=i;

        while(p>0){

            if(p%10==2){c++;}

            if(p>10)p=p/10;

              else p=0;

        }

    }

    cout<<c;

    return 0;

}



by 52088 二月 25, 2017, 10:05 a.m.

Solution_ID:25209            机智的用了个函数

                   时间复杂度:Θ() 空间复杂度:Θ()

#include<iostream>

using namespace std;

int judge(int x,int num)

{

    if(x%10==2)

       {

           num++;

       }

    if(x>10)

       {

           x=x/10;

           return judge(x,num);

       }

       return num;

}

main()

{

    int a,b,sum=0,i;

    cin>>a>>b;

    for(i=a;i<b+1;i++)

    {

        sum=sum+judge(i,0);

    }

    cout<<sum<<endl;

}


by 49251 二月 24, 2017, 12:11 p.m.

Solution_ID:23713            。。。

                   时间复杂度:Θ() 空间复杂度:Θ()

#include <iostream>

using namespace std;

int main(int argc, char *argv[])

{

    int from,to,outresult=0;

    cin >>from>>to;

    for(int i=from;i<=to;i++){

        int tmp=i;

        while(tmp>0) //反复相除,直到小于0

        {

            if(tmp%10==2) outresult++; //符合条件

            tmp/=10; //反复相除

        }

    } 

    cout <<outresult<<endl;

    return 0;

}


by 44546 十一月 27, 2016, 5:47 p.m.

Solution_ID:23374            C++AC代码 保证看得懂

                   时间复杂度:Θ() 空间复杂度:Θ()

#include <cstdlib>

#include <iostream>


using namespace std;


int main(int argc, char** argv) {

int i, s, b, a[10005], ans = 0;

cin >> s >> b;

for (i = s; i <= b; i++)

 a[i] = i;

for (i = s; i <= b; i++)

{

 while (a[i] != 0)

 {

   if (a[i] % 10 == 2)  ans++;//从右边找起

   a[i] = (a[i] - (a[i] % 10)) / 10;//看下一位

 }

}

cout << ans << endl;

return 0;

}


by 44225 十一月 14, 2016, 10:18 p.m.

Solution_ID:23041            居然不让用itoa函数。。。

                   时间复杂度:Θ() 空间复杂度:Θ()

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

int lu(int b)

{

int c=0,i;

for (i=10000000;i>=1;i/=10)

{

if (b/i==2) c++;

b-=(b/i)*i;

}

return c;

}

int main()

{

int a,b,s=0,i;

scanf("%d%d",&a,&b);

for (i=a;i<=b;i++)

{

s+=lu(i);

}

printf("%d",s);

return 0;

}


by 46892 十一月 7, 2016, 7:07 p.m.

Solution_ID:22618            shua

                   时间复杂度:Θ() 空间复杂度:Θ()

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int two(int a){
	char p[9999];
	sprintf(p,"%d",a);
	int c=0;
	for(int i=0;i<strlen(p);i++)if(p[i]==50)c++;
	return c;
}
int main(){
	int n,m;
	cin>>n>>m;int c=0;
	for(int i=n;i<=m;i++)c+=two(i);
	cout<<c;
}

by 45271 十月 26, 2016, 10 p.m.

Solution_ID:21944            pascal AC

                   时间复杂度:Θ() 空间复杂度:Θ()

 var
  s,ss:ansistring;
  i,n,m,ans:longint;
begin
  read(n,m);
  for i:=n to m do  begin str(i,ss);s:=s+ss; end;
  for i:=1 to length(s) do if s[i]='2' then inc(ans);
  writeln(ans);
end.


by 12392 十月 6, 2016, 11:23 a.m.

Solution_ID:21757            咸阳彩虹wangqiyan

                   时间复杂度:Θ() 空间复杂度:Θ()

var l,r,i,ans:integer;


function tj(x:integer):integer;//从右往左逐位统计某个数里2出现的次数

  var t:integer;

 begin

   t:=0;

    while x<>0 do

     begin

       if x mod 10=2 then inc(t);

       x:=x div 10;

     end;

   tj:=t;

  end;


begin

  readln(l,r);

  ans:=0;

  for i:=l to r do //对每个数统计并累加次数

     ans:=ans+tj(i);

  writeln(ans);  

end.


用函数写更简单哦


by 43305 九月 30, 2016, 11:01 a.m.

Solution_ID:20094            水水更健康

                   时间复杂度:Θ(o(n)) 空间复杂度:Θ(o(nlogn))

这里写题解


#include<cstdio>  

#include<iostream>  

#include<algorithm>

#include<math.h> 

#include<string.h>  

#include<vector> 

#include<queue>

#include<iterator>

#include<vector>

#include<set>

#define dinf 0x3f3f3f3f

typedef long long ll;

const int Max=(1<<16)+10;

using namespace std;

 

int a[100000009],m;


int Sta(int l,int r)

{

int ans=0;

for(int i=l;i<=r;i++)

{

int n=i;

while(n)

{

int t=n%10;

if(t==2)

ans++;

n/=10;

}

}

return ans;

}


int main()

{

int l,r;

while(~scanf("%d %d",&l,&r))

{

printf("%d\n",Sta(l,r));

}

return 0;

}




by 33204 七月 28, 2016, 10:33 a.m.

Solution_ID:19545            这样都能过?我原来还当会TLE的

                   时间复杂度:Θ() 空间复杂度:Θ()

var
  l,r,i,j,t:longint;
  s:string[5];
begin
  read(l,r);
  t:=0;
  for i:=l to r do
  begin
    str(i,s);
    for j:=1 to length(s) do
      if s[j]='2' then inc(t);
  end;
  write(t);
end.


by 40305 七月 14, 2016, 2:54 p.m.

Solution_ID:17300            不能再简单了~~

                   时间复杂度:Θ(o(n^2)) 空间复杂度:Θ()

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    int L=0,R=0;
    cin>>L>>R;
    int sum=0;
    for(int i=L;i<=R;i++)
    {
        int swap=i;
        while(swap)
        {
            int remainder=swap%10;
            if(remainder==2)
            {
                sum++;
            }
            swap/=10;
        }
    }
    cout<<sum;
}


by 35455 三月 18, 2016, 3:33 p.m.