数据结构——组装齿轮问题

来源:互联网 发布:下载手机相机软件 编辑:程序博客网 时间:2024/05/13 08:33

这题很蛋疼

我一直拖到快折扣才写

写了几次也都有几个案例RE或WA了

实在没兴趣弄这个题

就找了个学长的程序,改了下

#include<stdio.h>static unsigned long b[100000]={0},k,a[100000];long ys(long a,long b){    long m,n,r;    m=(a>b)?a:b;    n=(a>b)?b:a;do{r=m%n;if(r==0)break;m=n;n=r;}while(1);return n;}int main(void){    unsigned long bi_a,bi_b,bi_c,bi_d,i,j=0,number,n,num[20],flag,max,e,f,x,k=0;scanf("%ld",&number);for(i=0;i<number;i++){        scanf("%ld",&num[i]);}for(i=0;i<number;i++)for(j=0;j<number;j++){            if(num[i]%num[j]==0){                a[k++]=num[i]/num[j];                b[num[i]/num[j]-1]=1;        }        else{            if(num[j]%num[i]==0){                a[k++]=num[j]/num[i];                b[num[j]/num[i]-1]=1;            }        }        }for(i=0;i<k;i++)for(j=0;j<k;j++){            if(a[j]==0)            continue;if(a[i]%a[j]==0){                x=a[i]/a[j];if(x==0)continue;if(b[x-1]!=1){                    a[k++]=x;b[x-1]=1;}}x=a[i]*a[j];if(x>100000||x==0)continue;else{                if(b[x-1]!=1){                    b[x-1]=1;                    a[k++]=x;                }}}scanf("%ld",&n);for(i=0;i<n;i++){        scanf("%ld%ld",&bi_a,&bi_b);flag=0;max=ys(bi_a,bi_b);bi_c=bi_a/max;bi_d=bi_b/max;j=1;while(1){            e=bi_c*j;f=bi_d*j;if(e>100000||f>100000)break;if(b[e-1]==1&&b[f-1]==1){                flag=1;break;}j++;}        if(flag==0)printf("Gear ratio %ld:%ld cannot be realized.\n",bi_a,bi_b);elseprintf("Gear ratio %ld:%ld can be realized.\n",bi_a,bi_b);}    return 0;}


原创粉丝点击