题目

源地址:

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=9&page=show_problem&problem=666

理解

提议比较简单,给你0~9这十个数字,要求将其组合为两个五位数X和Y,使得其满足X/Y=N这样的形式。然后就想到了用STL里面的next_permutation函数,很快把代码写了出来,中间还用到了queue来存储答案。不过WA了两发之后开始怀疑是不是STL效率太低导致T了,改用数组模拟,但是还是WA了。经过三个小时的漫长Debug之路,才发现原来问题出在输入输出我多输出了一个空行!!! 真的是。。。太。。。

代码


#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <deque>
#include <list>
#include <set>
#include <map>
#include <stack>
#include <queue>
#include <numeric>
#include <iomanip>
#include <bitset>
#include <sstream>
#include <fstream>
#define debug puts("-----")
#define pi (acos(-1.0))
#define eps (1e-8)
#define inf (1<<28)
#define ll long long int
using namespace std;

int num[10]= {0,1,2,3,4,5,6,7,8,9};
int a[100][100],b[100][100];
int ans[100];
int n,x,y,tmp;

void init()
{
    memset(ans,0,sizeof(ans));
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    do
    {
        x=num[0]*10000+num[1]*1000+num[2]*100+num[3]*10+num[4];
        y=num[5]*10000+num[6]*1000+num[7]*100+num[8]*10+num[9];
        if(x%y==0)
        {
            tmp=x/y;
            a[tmp][ans[tmp]]=x;
            b[tmp][ans[tmp]]=y;
            ans[tmp]++;
        }
    }
    while(next_permutation(num,num+10));
}

int main(int argc, char const *argv[])
{
    init();
    int casen=0;
    while(~scanf("%d", &n)&&n)
    {
        if(casen>0) printf("\n");
        casen++;
        if(ans[n]==0)
            printf("There are no solutions for %d.\n", n);
        else
        {
            for(int i=0; i<ans[n]; i++)
            {
                printf("%05d / %05d = %d\n", a[n][i], b[n][i], n);
            }
        }
    }
    return 0;
}

更新日志

  • 2014年11月2日 已AC。