解题思路:
M个人,N个一元,K个两元。
将这M个人以0到M-1的编号存入到vector中,
对这两个组成部分进行判断,
若N小于K,n直接输出0;
若N大于K,对这个序列通过next_permutation进行排列,
在排列中遍历vector,若元素<N,s++;
若元素>=N,s--
对其进行判断,若s小于0,直接break,进行下一次
若s>=0;n++;
最后输出n;
注意事项:
参考代码:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int M,N,K,i,s,n;
vector<int>v;
cin>>M>>N>>K;
for(i=0;i<M;i++)
v.push_back (i);
n=0;
if(N<K)
n=0;
else
{
vector<int>::iterator it=v.begin ();
do
{
s=0;
for(i=0;i<M;i++)
{
if(v[i]<N)
s++;
else
s--;
if(s<0)
break;
}
if(s>=0)
n++;
}while(next_permutation(it,it+v.size ()));
}
cout<<n<<endl;
return 0;
}
0.0分
1 人评分
简单的a+b (C语言代码)浏览:765 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:737 |
【亲和数】 (C语言代码)浏览:541 |
IP判断 (C语言描述,蓝桥杯)浏览:1118 |
DNA (C语言代码)浏览:564 |
DNA (C语言代码)浏览:798 |
大神老白 (C语言代码)浏览:637 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:497 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:609 |
神奇的fans (C语言代码)浏览:1125 |