P1749 [入门赛 #19] 分饼干 II 题解

题目描述

老师有 N 块饼干,要分给 k 名小朋友。

每名小朋友至少拿到一块饼干,老师想让每名小朋友拿到的饼干数量都不一样多,请问老师能否实现这个目标。

输入格式

本题单个测试点内有多组测试数据。

输入共 T+1 行。

输入第一行为一个整数 T,代表测试数据组数。 接下来 T 行,每行两个整数,分别为 N,k

输出格式 输出共 T 行,依次对应 T 组测试数据。如果该组测试数据

可以实现,输出 Yes 。无法实现,输出 No 。

思路

1.首先判断人数是否大于饼干数,如果人数大于饼干数,肯定不够分,输出 NO
2.若人数等于饼干数,如果只有一个人,则输出 YES ,否则满足不了每人分到的数量不同,输出 NO 
3.从第一个人开始,第一个人一个,第二个人两个,第三个人三个.....第 k 个人 k 个。在此期间,每分完一个人,饼干数减去这个人最需要的饼干数。如果饼干数小于这个人需要的饼干数,则代表不够分,输出 NO 。

4.若都不满足,则证明符合题意,输出 YES 。

代码

#include<iostream>
using namespace std;
int n,k,q;
void fx(){
	
		cin>>n>>q;//输入饼干数与人数
		if(q>n){
			cout<<"No"<<endl;//若人数大于饼干数,肯定不够分,输出 NO
			return ;
		}
		if(q==n){//若人数等于饼干数
			if(n == 1){//如果只有一个人,则输出 YES 
				cout<<"Yes"<<endl;
				return ;
			}
			else {//,否则满足不了每人分到的数量不同,输出 NO
				cout<<"No"<<endl;
				return ;
			}
		}
		int x = 1;//.从第一个人开始,第一个人一个,第二个人两个,第三个人三个.....第k个人k个。
		for(int i = 0; i < q; i ++){
			if(x > n){//如果饼干数小于这个人需要的饼干数,则代表不够分。输出 NO
				cout<<"No"<<endl;
				return;
			}
			n -= x;
			x ++;
		}
		cout<<"Yes"<<endl;//若都不满足,则证明符合题意,输出 YES 。
}
int main(){
	
	cin>>k;//输入数据组数
	for(int i = 1; i <= k; i ++){
		fx();//k次执行
	}
	return 0;
}

感谢观看^_^
AC记录
如果题解有任何问题,欢迎留言!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值