• 4.11 | 学习笔记


    1.打表法再解"1的个数问题”(应该会快点?)

    之前的代码,思路就是写一个判断函数,然后遍历给出的范围

    #include<bits/stdc++.h>
    using namespace std;
    
    int f1(int n)
    {
      int cnt=0;
      while(n)
      {
        if(n%10==1)cnt++;
        n/=10;
      }
      return cnt;
    }
    int main()
    {
      int t,tmp;
      cin>>t;
      for(int i=0;i<t;i++)
      {
        int sum=0;
        cin>>tmp;
        for(int j=1;j<=tmp;j++)
          sum+=f1(j);
        cout<<"case #"<<i<<":
    "<<sum<<endl;
      }
      return 0;
    }
    

      

    换种思路,因为比如第一次的范围是1到100,那么下次到200就还要再计算一次,所以考虑到打表;

    #include<bits/stdc++.h>
    using namespace std;
    
    int f[100010];
    int t,n,i,sum,tmp,onenumbers;
    
    int main()
    {
        for (i=1; i<=100000; i++)
        {
        	tmp=i;
            onenumbers=0;
            while (tmp)
            {
                if (tmp%10==1)onenumbers++;
                tmp/=10;
            }
            sum+=onenumbers;
            f[i]=sum;
        }
        cin>>t;
        for(i=0;i<t;i++)
        {
          cin>>n;
          cout<<"case #"<<i<<":
    "<<f[n]<<endl;
        }
        return 0;
    }
    

      

     2.进制转换...

    注意:1)写进制转换函数必须特判零!!!

               2)二进制自己写个函数,八进制和十六进制可以直接printf格式化输出,

                    八进制:printf("%o ",n); 十六进制printf("%X ",n)(这里X的大小写还能控制输出的十六进制字母大小写);

  • 相关阅读:
    第一阶段意见评论
    《大道至简》阅读笔记03
    大二下第十二周学习笔记
    《大道至简》阅读笔记02
    课上练习—单词统计
    大二下第十一周学习笔记
    《大道至简》阅读笔记01
    《人月神话》阅读笔记03
    大二下第十周学习笔记
    团队项目前期冲刺-10
  • 原文地址:https://www.cnblogs.com/MissCold/p/10687561.html
Copyright © 2020-2023  润新知