26190Sample Output10100100100100100100111111111111111111題意:給出一個整數n,(1 <= n <= 200)。求出任意一個它的倍數m,要求m必須只由十進制的'0'或'1'組成。思路:要不是放在這個搜索專題里我不會用搜索去解的,我肯定會暴力去解的;其實搜索也是一種枚舉啊,我這里用了兩種方法;dfs:每個數都會有答案,因為都必須是0 1 組成的十進制,我們就每次去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標志位,找到了直接回溯返回 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; }暴力:將每個數存數組,然后根據存放位置的奇偶來決定是否+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;//初始設置為1 int flag=0; for(i=1;i<=N;i++) { a[i]=a[i/2]*10+i%2;//寫幾個數找一個規律, if(a[i]%n==0) { printf("%lld/n",a[i]); flag=1; break; } } } return 0; }
新聞熱點
疑難解答