zoukankan      html  css  js  c++  java
  • 杭电 2089 ( 不要62 )

    这题吧,其实不是很难,就是在一个数里面找4和62,如果有,就是不幸运数字。

    这是我最初的想法,但是会超时。

    #include <iostream>
    #include<math.h>
    #include <iomanip>
    #include<cstdio>
    #include<string>
    #include<map>
    #include<vector>
    #include<list>
    #include<algorithm>
    #include<stdlib.h>
    #include<iterator>
    #include<sstream>
    #include<string.h>
    using namespace std;
    
    //超市代码
    int find462(int n)
    {
        int temp=n;
        int flag62=0;
        int flag4=0;
        int ck;
        while(temp>0)
        {
            ck=temp%10;
            if(ck==4)
            {
                return 1;//不吉利
            }
    
            else if(ck==2)
            {
                if(flag62==0)
                {
                    flag62=1;
                }
            }
            else if(ck==6)
            {
                if(flag62==1)
                {
                    return 1;
                }
            }
            else
            {
                flag62=0;
            }
            temp=temp/10;
    
        }
    
    }
    
    
    int main()
    {
    
        int m,n;
    
        while(cin>>m>>n)
        {
            int cnt=0;
            if(m==0&&n==0)
            {
                break;
            }
            for(int i=m;i<=n;i++)
            {
                if(find462(i)==0)
                {
                    cnt++;
                }
            }
            cout<<cnt<<endl;
        }
        return 0;
    }

    然后网上找了一种很投机取巧的办法,就是先在把范围中所有的不幸运数字全部找出来,然后再判断输入的范围中有没有这些数字,这样可能就是调用函数次数少了,然后就快了。

    #include <iostream>
    #include<math.h>
    #include <iomanip>
    #include<cstdio>
    #include<string>
    #include<map>
    #include<vector>
    #include<list>
    #include<algorithm>
    #include<stdlib.h>
    #include<iterator>
    #include<sstream>
    #include<string.h>
    using namespace std;
    
    int a[1000001];
    
    
    int main()
    {
         int temp;
         memset(a,0,sizeof(int)*1000001);
        for(int i=1;i<1000001;i++)
        {
            temp=i;
            while(temp>0)
            {
                if(temp%10==4||temp%100==62)//这个 算法还是很 666的
                {
                    a[i]=1;
                    break;//下一个 i
                }
                temp=temp/10;
            }
        }
    
        int m,n;
        while(cin>>m>>n)
        {
            int cnt=0;
            if(m==0&&n==0)
            {
                break;
            }
            for(int i=m;i<=n;i++)
            {
                if(a[i]==0)
                {
                    cnt++;
                }
            }
             cout<<cnt<<endl;
        }
        return 0;
    }
  • 相关阅读:
    phpMyAdmin导入大的sql文件
    mysql错误代码解释
    Sphinx在windows下安装使用[支持中文全文检索]
    Linux查看磁盘分区等命令和相关工具介绍
    webuploader大小限制
    常用的C#正则表达式!
    C# csv.excel导入
    日志
    微信
    winform窗口控件随窗口变化
  • 原文地址:https://www.cnblogs.com/William-xh/p/6947602.html
Copyright © 2011-2022 走看看