题目:
小红的数字分裂
小红有一个数组,她每次可以选择数组的一个元素 x ,将这个元素分成两个元素 a 和 b ,使得 a+b=x。
请问小红最少需要操作多少次才可以使得数组的所有元素都相等。
输入描述:
第一行输入一个整数 n 表示数组长度。
第二行输入 n 个整数表示数组。
输出描述:
输出一个整数表示答案。
代码实现:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[n];
int g=0;
for(int i=0;i<n;i++)
{cin>>a[i];
g=__gcd(a[i],g);
}
long long s=0;
for(int i=0;i<n;i++)
{
s+=a[i]/g-1;
}
cout<<s;
}
补充:
__gcd(a,b)函数在头文件为#include< algorithm>里面,用来找出两数的最大公约数。
在for循环内可以做到对每个数都进行最大公约数求值。int g=0; g=__gcd(a,g);
a,b不可以是浮点数。