杭電 2089 ( 不要62 )
阿新 • • 發佈:2017-06-06
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 )