USACO - 2.2 Runaround Numbers(枚举)

来源:互联网 发布:php删除数据库指定元素 编辑:程序博客网 时间:2024/05/22 20:12

题目链接:http://train.usaco.org/usacoprob2?a=ScFaavqnaPI&S=runround

/*ID: 1590291TASK: runroundLANG: C++*/#include <iostream>#include <fstream>#include <cstring>#include <cmath>using namespace std;/****************************************************************************************************************            题意:给定一个数字,输出大于该数字的最小循环数。循环数概念看题            思路:            1,枚举即可,把情况考虑全            2,注意题意 数字智能由 1~9组成且只出现一次,注意没有0!!!在遍历大于给定的数字时注意考虑****************************************************************************************************************/int sign[20],cont[20];int fuc(long x){    memset(sign,0,sizeof(sign));    memset(cont,0,sizeof(cont));    int le=(int)log10(x)+1;  //k为长度    int num=0;    if(le == 1) return 0;    for(int i = le-1;i >= 0;i -- , x/=10)        sign[i]=x%10;    for(int i = 0;i < le;i ++)        cont[sign[i]]++;    for(int i = 0;i < le;i ++)        if(cont[i] > 1)            return 0;    memset(cont,0,sizeof(cont));    int id=0;    for(int i = 0;i < le;i ++){        cont[sign[id]]++;        if(cont[sign[id]] > 1)            return 0;        id=(id+sign[id])%le;    }    if(id != 0) return 0;       //这个最容易忘了,题意说不能有 0,这个就可以排除~    return 1;}int main(){    ifstream fin("runround.in");    ofstream fout("runround.out");    unsigned long n;    while(fin>>n)    {        for(long i = n+1; ;i ++){            if(fuc(i)){                fout<<i<<endl;                break;            }        }    }    return 0;}


0 0
原创粉丝点击