Algorithm 版 (精华区)

发信人: Lerry (life is waiting...), 信区: Algorithm
标  题: 1003K-CrashingBalloon-ZJU
发信站: 哈工大紫丁香 (2002年10月06日19:54:21 星期天), 站内信件

测试每个数是否能分解成100以内的整数的乘积
然后根据结果分类输出
只有两个都能分解的时候,判断有没有冲突
#include "stdafx.h"
#include "stdio.h"
#include "string.h"
int core=0;
int p1,p2;
int divt(char* flag,int N,int last,int pos)
{
    int i;
    if(N==1){core=1;return 0;}
    if(pos==100) return 0;
    if(N<last) return 0;
    for(i=last+1;i<=100;i++)
        if(N%i==0&&flag[i]>=1)
        {
            flag[i]=-1;
            divt(flag,N/i,i,pos+1);
            flag[i]=1;
        }
    return 0;
}
int div(char* flag,int N,int M,int last,int pos)
{
    int i;
    if(core==1) return 0;
    if(pos==100) return 0;
    if(N==1){divt(flag,M,1,0);return 0;}
    if(N<last) return 0;
    for(i=last+1;i<=100;i++)
        if(N%i==0)
        {
            flag[i]=0;
            div(flag,N/i,M,i,pos+1);
            flag[i]=1;
        }
    return 0;
}
int main(int argc, char* argv[])
{
    char flag[101];
    int k,N,M;
#ifndef ONLINE_JUDGE
    freopen("1003.in","r",stdin);
#endif
    while(scanf("%d%d",&N,&M)!=EOF)
    {
        memset(flag,1,101);
        if(N<M) {k=M;M=N;N=k;}
        p1=p2=core=0;
        divt(flag,N,1,0);
        p1=core;
        core=0;
        memset(flag,1,101);
        divt(flag,M,1,0);
        p2=core;
        core=0;
        if(p1*p2)
        {
            memset(flag,1,101);
            div(flag,N,M,1,0);
            if(core) printf("%d\n",N);
            else     printf("%d\n",M);
        }
        else if(p1) printf("%d\n",N);
        else if(p2) printf("%d\n",M);
        else        printf("%d\n",N);
    }
    return 0;
}


--
猜谜语:太监以前有,进宫后没有;
和尚有但是不用,外国人比中国人的长。
打一人身上的东西?想歪了吧——是名字!

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.249.231]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:6.960毫秒