12
题解:(可以把些铅笔掰断使得它们可以一样长,当然要保证铅笔尽可能的长)铅笔尽可能的长,则需找出三者的最大公约数(在搜的时候,应该从这N个数中最小的哪个数开始,然后倒着搜)
for(int i=a[0]; i>=1; i--)
代码:
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> using namespace std; int a[105]; int main() { int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); for(int i=0; i<n; i++) { scanf("%d",&a[i]); } sort(a,a+n);///排序(从小到大) int flag;///记录是否是最大公约数 int x; for(int i=a[0]; i>=1; i--) { flag=0; for(int j=0; j<n; j++) { if(a[j]%i!=0) { flag=1;///表示此时的数不是最大公约数 break; } } if(flag) continue; else { x=i; break; } } int sum=0; for(int i=0; i<n; i++) { sum+=a[i]/x; } printf("%d\n",sum); } return 0; }