UVa 725

来源:互联网 发布:mysql limit与where 编辑:程序博客网 时间:2024/06/08 08:50

#include <cstdio>#include <algorithm>#include<iostream>#include<cstring>#include<iomanip>using namespace std;int arr[10]={0};bool is_Same(int a){int tmp=a;int remain; if(a<10000)arr[0]=1;while(tmp)//bug出在这   注意先后顺序 {remain=tmp%10;if(arr[remain]!=0)return false;arr[remain]++;tmp/=10;}return true;}bool yes(){int sum=0;for(int i=0;i<10;i++)sum+=arr[i];return (sum==10);}bool division(int n){bool flag=false;for(int i=1234;i<50000;i++){if(is_Same(i)&&is_Same(i*n)&&yes()){cout<<i*n<<" / "<<setw(5)<<setfill('0')<<i<<" = "<<n<<endl;//printf("%05d / %05d = %d\n",i*n,i,n);flag=true;}memset(arr,0,sizeof(arr));}return flag;}int main(){ int n; int i=0;  while(cin>>n&&n!=0) { if(i++!=0)cout<<endl; if(!division(n)) cout<<"There are no solutions for "<<n<<'.'<<endl; } return 0; }

思路:直接枚举所有情况的计算量是很可怕的,10!=3628800,所以经过分析可以进行优化,只需计算被除数五位数即可,剩下的除数可以通过商与被除数乘积算出。
问题:一直假设被除数(这里是i)小于五位数,所以将循环上界设置在10000导致提交一直WA/(ㄒoㄒ)/~~

0 0
原创粉丝点击