标签:mon printf output 包括 整数 integer font res lan
| Time Limit: 1000MS | Memory Limit: 10000K | |||
| Total Submissions: 21436 | Accepted: 8775 | Special Judge | ||
Description
Input
Output
Sample Input
2 6 19 0
Sample Output
10 100100100100100100 111111111111111111
Source
题意:输入一个正整数n(1<=n<=200),然后要求找一个仅仅包括0和1的十进制数字能整除n
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
using namespace std;
int n;
int ans;
int v[5000];
struct node
{
    int x;
    int y;
} a[1000010];
void DFS(int k)
{
    int pt = a[k].y;
    if(pt <= 0)
    {
        printf("1");
        return ;
    }
    DFS(pt);
    printf("%d",a[pt].x);
}
void BFS()
{
    ans = 1;
    memset(v,0,sizeof(v));
    queue<node>q;
    struct node t,f;
    t.x = 1;
    t.y = 0;
    a[0].x = 1;
    a[0].y = 0;
    q.push(t);
    while(!q.empty())
    {
        t = q.front();
        q.pop();
        for(int i=0; i<=1; i++)
        {
            f.x = t.x * 10 + i;  /// 同余模定理应用
            if(v[f.x] == 0)
            {
                f.x = f.x % n;
                f.y = ans;
                q.push(f);
                v[f.x] = 1;
                a[ans].x = i;
                a[ans].y = t.y;
                if(f.x == 0)
                {
                    DFS(ans);
                    printf("%d\n",i);
                    return ;
                }
                ans++;
            }
        }
    }
}
int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        if(n == 0)
        {
            break;
        }
        BFS();
    }
    return 0;
}
51nod 1109
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<queue>
using namespace std;
int n;
int ans;
int v[1010000];
struct node {
    int x;
    int y;
} a[1000010];
void DFS(int k) {
    int pt = a[k].y;
    if(pt <= 0) {
        printf("1");
        return ;
    }
    DFS(pt);
    printf("%d",a[pt].x);
}
void BFS() {
    ans = 1;
    memset(v,0,sizeof(v));
    queue<node>q;
    while(!q.empty()){
        q.pop();
    }
    struct node t,f;
    t.x = 1;
    t.y = 0;
    a[0].x = 1;
    a[0].y = 0;
    q.push(t);
    while(!q.empty()) {
        t = q.front();
        q.pop();
        for(int i=0; i<=1; i++) {
            f.x = t.x * 10 + i;  /// 同余模定理应用
            f.x = f.x % n;
            if(v[f.x] == 0) {
                f.y = ans;
                q.push(f);
                v[f.x] = 1;
                a[ans].x = i;
                a[ans].y = t.y;
                if(f.x == 0) {
                    DFS(ans);
                    printf("%d\n",i);
                    return ;
                }
                ans++;
            }
        }
    }
}
int main() {
    while(scanf("%d",&n)!=EOF) {
        BFS();
    }
    return 0;
}
POJ 1426 Find The Multiple && 51nod 1109 01组成的N的倍数 (BFS + 同余模定理)
标签:mon printf output 包括 整数 integer font res lan
原文地址:http://www.cnblogs.com/wzzkaifa/p/7258902.html