1 条题解
-
0
#include <stdio.h> int gcd(int a,int b) { int c=1,max,min; max=(a>b)?a:b; min=(a>b)?b:a; while (c!=0) { c=max%min; max=min; min=c; } return max; } int main() { int len,i; scanf("%d",&len); //定义并输入数组长度:len //定义循环变量:i int org[len],left[len-1],right[len-1],gcds[len]; for(i=1;i<=len;i++)scanf("%d",&org[i-1]); /* 定义并输入一个数组储存原始值:org[len] 定义两个数组储存从左与从右遍历的最大公约数值:left[len]与right[len] 定义一个数组储存len次忽略某位数的最大公约数:gcds[len] */ int result; //定义最终结果变量result left[0]=org[0]; for(i=2;i<=len-1;i++)left[i-1]=gcd(left[i-2],org[i-1]); //计算left[len-1] right[0]=org[len-1]; for(i=2;i<=len-1;i++)right[i-1]=gcd(right[i-2],org[len-i]); //计算right[len-1] gcds[0]=right[len-2]; gcds[len-1]=left[len-2]; for(i=2;i<=len-1;i++)gcds[i-1]=gcd(left[i-2],right[len-i-1]); //进行左右归并,求出gcds[len] result=gcds[0]; for(i=1;i<=len;i++)result=(gcds[i-1]>result)?gcds[i-1]:result; printf("%d",result); return 0; } //
- 1
信息
- ID
- 972
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 536
- 已通过
- 19
- 上传者