poj 1426
来源:互联网 发布:excel筛选多列数据 编辑:程序博客网 时间:2024/05/21 01:56
给定一个数n,求n的任意不为0的倍数m,要求m只由0,1构成,special judge
分析:m的第一个数字一定为1,接着扩展 10,11, 100,101,110,111, 1000,1001,1010,1011,1100,1111,......
分别是由1个数字,2个数字,3个数字,......构成 可以用广度优先搜索,每一个数对n取余,若能整除则返回
取余的时候,若m%n=r,则(m*10+y)%n等于(r*10+y)%n
代码:
#include<iostream>
#include<queue>
#include<string>
using namespace std;
int visited[210];
struct Node{
string num; //存当前的数,数可能超出int,double等的范围,所以用字符串存储
int remaind;//存余数
};
void BFS(int n){
Node t;
queue<Node> que;
memset(visited,0,sizeof(visited));
t.num = "1";
t.remaind = 1%n;
que.push(t);
while(!que.empty()){
Node s = que.front();
que.pop();
if(s.remaind == 0){
cout<<s.num<<endl;
return ;
}
t.num = s.num + "1";
t.remaind = (s.remaind*10 + 1)%n;
if(visited[t.remaind] == 0){
que.push(t);
visited[t.remaind] = 1; //没加visited的时候超时了 若某两个数对n取余相等 则之后的过程都是重复的
}
t.num = s.num + "0";
t.remaind = (s.remaind*10 + 0)%n;
if(visited[t.remaind] == 0){
que.push(t);
visited[t.remaind] = 1;
}
}
}
int main(){
int n;
while(cin>>n&&n){
BFS(n);
}
return 0;
}
- poj 1426
- poj 1426
- POJ 1426
- POJ 1426
- poj 1426
- poj 1426
- poj 1426
- POJ 1426
- poj-1426
- poj 1426
- poj 1426
- 1426POJ
- poj 1426
- poj 1426
- poj--1426
- POJ 1426
- POJ 1426
- poj 1426
- java 设计模式 学习笔记(11) 建造者模式
- 写给每一个面临 OFFER 选择的人(转)
- 奥托零件价目表
- [转]知乎上某人写面试豆瓣产品经理的经历
- 【转】VirtualBox 4.0.6 发布
- poj 1426
- Java内存泄露的理解与解决
- bean:write输出的数字类型的值 加1后 显示出来
- Linux 下 如何打 PATCH 及制作 DIFF
- ubuntu 11.04 安装gnome 3
- 【11年华科计算机考研经验】追梦华中大-我的漫漫考研路
- 【转】3款Win7仿其他系统主题
- 倾国倾城
- VC++中CMAP的使用