杭電ACM 2089 不要62

2021-07-03 21:00:04 字數 1618 閱讀 9538

這個題目的意思就是從給定的乙個數字範圍內,求出不包含不吉利數字4或者62的數字個數。所以主要問題是如何判斷該數是不是吉利數字,我的想法是對於乙個數字,一位一位的進行判斷該位是否為4或者連續兩位是否為62。這個很容易實現,一開始我寫的**如下:

#include using namespace std;

int main(void)

}else

if(temp1%10==6)//出現6做判斷

else

flag=0;//當出現6的是時候,如果還不是62,那麼這次就捨去,flag重新置0,這個也可以排除了66這種可能

}else

flag=0;//這個標誌主要是當出現682這樣的數時候,出現錯誤

temp1=temp1/10;//進入該數的下一位進行判斷

}//如果62已經判斷成功了,下面就不需要判斷了,如果不做次此判斷有些數字會統計2次,比如462

if(flag1==1)

/****檢驗是否有4*****/

temp2=i;

while(temp2>=4)

else

temp2=temp2/10;//進入該數的下一位進行判斷}}

//格式輸出

cout/下面變數需要重新初始化,保證下乙個迴圈正確

unlucky_num=0;

}return

0;}

按照上面我剛開始的方法寫的話,提交會給出的錯誤為time limit exceeded,說明已經超出了時間限制,儘管這樣做自我感速度也是很快,但是無法通過還是不行的,然後在網上檢視了一下資料,上面說因為題目要求只在1到1000000之間進行,所以不妨可以先遍歷一遍這個範圍把不吉利的數字做個標記儲存在乙個陣列中。當新輸入的範圍來時,就檢視這個範圍內的資料的標誌,就可以在單位時間得出該數是否是不吉利的數字。下面給出我的ac**,就是在上述**修改而來的。

#include #includeusing namespace std;

//因為題目中0int a[1000001];//因為申請的記憶體很大,必須做全域性變數。如果放在main裡面,就會出現棧溢位

int main(void)

}else

if(temp1%10==6) //出現6做判斷

else

flag=0;//當出現6的是時候,如果還不是62,那麼這次就捨去,flag重新置0,這個也可以排除了66這種可能

}else

flag=0;//這個標誌主要是當出現682這樣的數時候,出現錯誤

temp1=temp1/10;//進入該數的下一位進行判斷

}/****檢驗是否有4*****/

temp2=k;

while(temp2>=4)

else

temp2=temp2/10;//進入該數的下一位進行判斷}}

//對輸入的資料範圍做判斷

while(cin>>n>>m)

}//格式輸出結果

cout<0;

}return

0;}

杭電2089 不要62

problem description 杭州人稱那些傻乎乎粘嗒嗒的人為62 音 laoer 杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有4或62的號碼。例如 ...

杭電OJ 2089 不要62

problem description 杭州人稱那些傻乎乎粘嗒嗒的人為62 音 laoer 杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有4或62的號碼。例如 ...

數字DP HDU2089 不要62

problem description 杭州人稱那些傻乎乎粘嗒嗒的人為62 音 laoer 杭州交通管理局經常會擴充一些的士車牌照,新近出來乙個好訊息,以後上牌照,不再含有不吉利的數字了,這樣一來,就可以消除個別的士司機和乘客的心理障礙,更安全地服務大眾。不吉利的數字為所有含有4或62的號碼。例如 ...