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

这题很蛋疼

我一直拖到快折扣才写

写了几次也都有几个案例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);
		else
			printf("Gear ratio %ld:%ld can be realized.\n",bi_a,bi_b);
	}
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值