SDNU 1354.Cut the Cable(gcd)

Description

    The company have n(n<=100) long cables(the length is not necessarily the same),we assume that the length of every long cable is an integer and not exceeded 10000 meters. Now we cut them into short cables with the same length. We are required not to waste every long cable and the length of the short cable is the longer the better. Please calculate the longest length of short cable and how many short cables after cutting.

Input

    The input contains two lines.
    The first line is n, represents the number of long cables.
    The second line has n positive integers separated by spaces, represent the length of long cable.

Output

    The first line represent the longest length of short cable.
    The second line represent the number of short cables.

Sample Input

4
18 12 24 30

Sample Output

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值