解题思路:
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 人评分
C语言训练-求1+2!+3!+...+N!的和 (C语言代码)浏览:788 |
WU-格式化数据输出 (C语言代码)浏览:1755 |
哥德巴赫曾猜测 (C语言代码)浏览:2348 |
C语言程序设计教程(第三版)课后习题9.6 (C语言代码)浏览:585 |
简单的a+b (C语言代码)浏览:816 |
回文数字 (C语言代码)浏览:2510 |
1128题解(返回值为数组的情况)浏览:473 |
Quadratic Equation (C语言代码)浏览:988 |
C语言程序设计教程(第三版)课后习题12.3 (C语言代码)浏览:548 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:401 |