26190Sample Output10100100100100100100111111111111111111題意:給出一個(gè)整數(shù)n,(1 <= n <= 200)。求出任意一個(gè)它的倍數(shù)m,要求m必須只由十進(jìn)制的'0'或'1'組成。思路:要不是放在這個(gè)搜索專題里我不會(huì)用搜索去解的,我肯定會(huì)暴力去解的;其實(shí)搜索也是一種枚舉啊,我這里用了兩種方法;dfs:每個(gè)數(shù)都會(huì)有答案,因?yàn)槎急仨毷? 1 組成的十進(jìn)制,我們就每次去dfs他們的十倍和十倍+1;#include<iostream>#include<cstdio>#include<cstring>using namespace std;int flag;void dfs(unsigned long long m,int x,int k){ if(flag||k>=19)//這里的flag標(biāo)志位,找到了直接回溯返回 return ; if(m%x==0) { flag=1; printf("%I64u/n",m); return ; } dfs(m*10,x,k+1); dfs(m*10+1,x,k+1); return ; }int main(){ int n; while(cin>>n&&n) { flag=0; dfs(1,n,0); } return 0; }暴力:將每個(gè)數(shù)存數(shù)組,然后根據(jù)存放位置的奇偶來決定是否+1,然后直到能整除!#include<cstdio>#include<iostream>#define ll long long #define N 6*100010using namespace std;ll a[N];int n;int main(){ int i; while(cin>>n&&n) { a[1]=1;//初始設(shè)置為1 int flag=0; for(i=1;i<=N;i++) { a[i]=a[i/2]*10+i%2;//寫幾個(gè)數(shù)找一個(gè)規(guī)律, if(a[i]%n==0) { printf("%lld/n",a[i]); flag=1; break; } } } return 0; }
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注