zjnu AllButOneDivisor

来源:互联网 发布:团购网站源码 编辑:程序博客网 时间:2024/06/05 16:00
Description给你K个整数,找到一个正整数N恰好能整除这里面K-1个数,如果有多个答案,输出最小的N,如果没有答案,输出“-1”;K的范围为2到6,每个数字都不同的,并且每个数字范围在1到15. Examples (1) {2, 3, 5} Returns: 6有很多答案符合,比如6,15,75,但是6是最小的,所以输出6. (2) {2, 4, 3, 9} Returns: 12 (3) {3, 2, 6} Returns: -1是2、3的倍数肯定是6的倍数,是6的倍数肯定是2、3的倍数,所以找不到恰好是其中2个数的公倍数。输出“-1”。(4) {6, 7, 8, 9, 10} Returns: 360 (5) {10, 6, 15} Returns: -1Input(gets() 输入,”, ”逗号及空格分隔)Sample Input2, 3, 5Sample Output6

这个题我开始想要用巧妙地方法做 后来发现没有巧妙地方法QAQ

那好吧我的锅  ……

真的就是一言不合就暴力……啊


#include<stdio.h>#include<string.h>#include<math.h>#include<algorithm>using namespace std;char a[50]={};int b[50]={};long long gcd(int x, int y){return y==0?x:gcd(y,x%y);}long long zxgbs(int x,int y){    return x*y/gcd(x,y);}int main(){    gets(a);    int i,j=0,min=999999999;    int len=strlen(a);    long long gbs;    b[0]=a[0]-'0';    for(i=1;i<len;i++)        {if(a[i]>='0'&&a[i]<='9'&&a[i-1]>='0'&&a[i-1]<='9') b[j]=10+a[i]-'0';        else if(a[i]>='0'&&a[i]<='9') b[++j]=a[i]-'0';}        int k=j;    for(i=0;i<=k;i++)//挑出其中一个数 不参与运算 注意i从0开始    {        gbs=1;        for(j=0;j<=k;j++)        {            if(i!=j)                gbs=zxgbs(gbs,b[j]);                //printf("%d\n",gbs);        }        if(gbs<min&&gbs%b[i]) min=gbs;    }    if(min<999999999) printf("%d\n",min);    else puts("-1");}


0 0
原创粉丝点击