1. 程式人生 > >杭電 2089 ( 不要62 )

杭電 2089 ( 不要62 )

flag 超時 cin main size clu str log sin

這題吧,其實不是很難,就是在一個數裏面找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;
}

杭電 2089 ( 不要62 )