题目描述
老师有 块饼干,要分给 名小朋友。
每名小朋友至少拿到一块饼干,老师想让每名小朋友拿到的饼干数量都不一样多,请问老师能否实现这个目标。
输入格式
本题单个测试点内有多组测试数据。
输入共 行。
输入第一行为一个整数 ,代表测试数据组数。 接下来 行,每行两个整数,分别为 。
输出格式 输出共 行,依次对应 组测试数据。如果该组测试数据
可以实现,输出 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记录
如果题解有任何问题,欢迎留言!!!