编程之美:找符合条件的整数

来源:互联网 发布:欧洲专利局数据库 编辑:程序博客网 时间:2024/05/16 08:30

问题描述:

任给正整数N,求最小正整数M,使得N*M的十进制表示形式里只含1和0

#include <iostream>#include <vector>using namespace std;#define MAX 1007vector<vector<int>> BigInt(MAX);int main(){  int N=99;for(int i=0;i<N;i++)BigInt[i].clear();BigInt[1].push_back(0);for(int i=1,j=10%N;;i++,j = (j*10)%N){int NoUpdate=0;bool flag=false;if(BigInt[j].size()==0){BigInt[j].clear();BigInt[j].push_back(i);}for(int k=1;k<N;k++){if(BigInt[k].size()>0&&(i>BigInt[k][BigInt[k].size()-1])&&(BigInt[(k+j)%N].size() == 0)){flag=true;BigInt[(k+j)%N]=BigInt[k];BigInt[(k+j)%N].push_back(i);}}if(flag==false)NoUpdate++;//如果经过一个循环节都没对BigInt进行更新,就是无解//或者BigInt[0]!=NULL,已经找到解if(NoUpdate == N||BigInt[0].size()>0)break;}if(BigInt[0].size()==0){}else{cout<<"N*M=";for(int i=BigInt[0][BigInt[0].size()-1],j=BigInt[0].size()-1;i>=0;i--){if(j>=0&&i==BigInt[0][j]){cout<<"1";j--;}else{cout<<"0";}}}    return 0;  }  


0 0
原创粉丝点击