USACO section2.2 Runaround Numbers题解&代码

来源:互联网 发布:广联达软件百度云 编辑:程序博客网 时间:2024/05/16 18:13

果然大半夜困成狗根本不能做题...用了memset()没加string.h也是醉醉的...

最简单粗暴的暴力...一个小优化或许是如果待检验数字有两个数字相等直接排除...

/* ID: rainbow16LANG: C++ TASK: runround */  #include<iostream>#include<stdio.h>#include<string.h>using namespace std;int a[10],k[10];long long num;bool check(long long num){long long temp=num;int t[10],len=0,ans=0;memset(a,0,sizeof(a));while(temp)if(a[temp%10])return false;else{a[temp%10]++;t[len++]=temp%10;temp/=10;}for(int i=len-1;i>=0;i--)k[len-1-i]=t[i];int n=0,p=k[n];while(a[k[n]]){a[k[n]]=0;n+=k[n];n%=len;ans++;}if(ans==len && n==0)return true;return false;}int main(void){freopen("runround.in","r",stdin);  freopen("runround.out","w",stdout);  cin>>num;while(num++)if(check(num))break;cout<<num<<endl;return 0;}


0 0