4 18 12 24 30
6 14
思路:这道题说是要切电缆,长度不能有浪费,输入的所有长度是整数,输出的结果长度也是个整数,那就是用gcd来求所有原始长度的最大公约数(让所有原始长度都可以整除,这样就不存在浪费),然后再求数量即可。(我个沙雕居然一开始想用二分,结果发现没法分)
#include <cstdio> #include <iostream> #include <cmath> #include <string> #include <cstring> #include <algorithm> #include <queue> #include <vector> #include <map> using namespace std; #define ll long long const int inf = 0x3f3f3f3f; const int mod = 1e9+7; int n, a[10000+8], num, len; int gcd(int x, int y) { if(y != 0)return gcd(y, x%y); return x; } int main() { num = 0; scanf("%d", &n); for(int i = 0; i<n; i++) scanf("%d", &a[i]); len = a[0]; for(int i = 1; i<n; i++) len = gcd(len, a[i]); for(int i = 0; i<n; i++) num += a[i]/len; printf("%d\n%d\n", len, num); return 0; }
原文:https://www.cnblogs.com/RootVount/p/11262751.html