ACM_51nod_1109_01组成的N的倍数
2017-08-29 22:39
218 查看
1109 01组成的N的倍数
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题问题解释
给定一个自然数N,找出一个M,使得M > 0且M是N的倍数,并且M的10进制表示只包含0或1。求最小的M。 例如:N = 4,M = 100。
Input
输入1个数N。(1 <= N <= 10^6)
Output
输出符合条件的最小的M。
Input示例
4
Output示例
100
问题分析
dfs搜索*10和*10+1两个方向,n限制为1e6,计算的m可能会超出ll数据类型的范围,所以自定义一个结构体,用字符数组储存01串m,用int记录m%n;
注意
记录01串用string类型会mle
AC代码
#include <iostream> #include<queue> #include<string> using namespace std; #define ll long long int struct node { char str[50]; int size = 1; ll m; }num; int n; string dfs() { if (n == 1) return "1"; queue<node> q; num.m = 1; num.str[num.size-1] = '1'; q.push(num); node tem; while (!q.empty()) { tem = q.front(); q.pop(); tem.m = tem.m * 10%n; tem.str[tem.size++] ='0'; if (tem.m% n == 0) return tem.str; q.push(tem); tem.m = (tem.m + 1)%n; tem.str[tem.size-1] = '1'; if (tem.m% n == 0) return tem.str; q.push(tem); } } int main() { while (cin>>n) { cout << dfs() << endl; } return 0; }
相关文章推荐
- 51nod 1109 01组成的N的倍数 【dfs+剪枝+vector】
- 51nod 1109 01组成的N的倍数(bfs)
- 51nod 1109 —— 01组成的N的倍数
- 51nod 1109 01组成的N的倍数
- 51nod 1109 —— 01组成的N的倍数
- POJ 1426 Find The Multiple && 51nod 1109 01组成的N的倍数 (BFS + 同余模定理)
- 51nod 1109 01组成的N的倍数
- 51nod 1109 01组成的N的倍数
- 51Nod-1109-01组成的N的倍数
- 51Nod - 1109 01组成的N的倍数 【bfs+同余定理】
- 51nod-1109 01组成的N的倍数(宽搜)
- 51NOD 1109 01组成的N的倍数
- 51nod 1109 01组成的N的倍数+
- 【51Nod 1109】01组成的N的倍数
- 51Nod 1109 01组成的N的倍数
- 51nod 1109 01组成的N的倍数
- 51Nod-1109-01组成的N的倍数
- 51nod 1109 01组成的N的倍数 (bfs)
- 51nod 1109 01组成的N的倍数(宽搜+剪枝)
- 51nod 1109 01组成的N的倍数【Bfs+同余定理剪枝】好题!