NOIP 2017 普及组初赛试题_完善程序 4.2:切割绳子

(切割绳子) 有 n 条绳子,每条绳子的长度已知且均为正整数。

绳子可以以任意正整数长度切割,但不可以连接。

现在要从这些绳子中切割出 m 条长度相同的绳段,求绳段的最大长度是多少。

(第一、二空 2.5 分,其余 3 分)

输入:

第一行是一个不超过 100 的正整数 n,

第二行是 n 个不超过10^6的正整数,表示每条绳子的长度,

第三行是一个不超过10^8的正整数 m。

 

输出:绳段的最大长度,若无法切割,输出 Failed。 

#include using namespace std;
int n, m, i, lbound, ubound, mid, count;
int len[100]; // 绳子长度
int main()
{
    cin >> n;
    count = 0;
    for (i = 0; i < n; i++)
    {
        //第i条绳子长度 
		cin >> len[i];
        
        //计算所有的绳子的长度 
		count+=len[i] //①;
    }
    
	//m 条长度相同的绳段
	cin >> m;
	
    //因为m为整数,最小为1,那么如果count的值比m都小,
	//就是所有的绳子截成长度为最小值1的绳子,那么数量也不够m条 
	if ( count < m /*②*/)
    {
        cout << "Failed" << endl;
        return 0;
    }
    
    lbound = 1;
    //第二行是 n 个不超过10^6的正整数,表示每条绳子的长度,
	ubound = 1000000;//1*10^6
    while ( lbound<ubound /*③*/)
    {
        mid =(lbound+ubound+1)/2 // ④;
        count = 0;
        for (i = 0; i < n; i++)
            count=count+len[i]/mid //⑤;
        
		if (count < m)
            ubound = mid - 1;
        else
            lbound = mid;
    }
    cout << lbound << endl;
    
	return 0;
}
/*
1.正确答案: count=count+len[i] / count+=len[i]
2.正确答案: count<m / m>count
3.正确答案: lbound<ubound / ubound>lbound
4.正确答案: (lbound+ubound+1)/2 / (lbound+ubound+1)>>1 / (lbound+ubound)/2+1
5.正确答案: count=count+len[i]/mid / count+=len[i]/mid
*/



 NOIP2017普及组初赛 完善程序 第2题 《切割绳子,二分法》noip2017pujiA4.2

NOIP2017普及组初赛 完善程序 第2题 《切割绳子,二分法》noip2017pujiA4.2 - 知乎

信息学奥赛普及组初赛真题解析:2017年程序完善第2题切割绳子

信息学奥赛普及组初赛真题解析:2017年程序完善第2题切割绳子,教育,资格考试,好看视频

NOIP2017普及组初赛难点整理

NOIP2017普及组初赛难点整理_少儿编程乔老师的博客-CSDN博客




 


 


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dllglvzhenfeng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值