[C/C++]员工考勤记录 - 2019校招编程刷题
参考链接
题目描述
给定一个字符串来代表一个员工的考勤纪录,这个纪录仅包含以下两个字符:
‘A’ : Absent,缺勤
‘P’ : Present,到场
如果一个员工的考勤纪录中不超过两个’A’(缺勤),那么这个员工会被奖赏。
如果你作为一个员工,想在连续N天的考勤周期中获得奖赏,请问有多少种考勤的组合能够满足要求
输入描述
考勤周期的天数N(正整数)
输出描述
这N天里能获得奖赏的考勤组合数
输入例子1:
3
输出例子1:
7
备注:
如:输入为3,有序数列第3项的值为2,则输出为2
思路:
- 排列组合题。
- 输入一个连续的天数n,使得这n天中最多有两次缺勤,这样就能保证员工得奖。即:这n天可以缺勤0次、1次或者2次。
- 只需要计算全勤的组合方式 +缺勤1次的组合方式 + 缺勤两次的组合方式。
- 全勤:是全P,只有一种。
- 缺勤1次:是从n个位置选一天缺勤,那就是n种。
- 缺勤两次:是从n个位置选两天缺勤,那就是Cn2 , 下面的数是n,上面的数是2。
- 加起来:1+n+Cn2。
- 因为有Cn2这个公式,所以要求n要大于等于2,那么n < 2的时候,即 n = 1天的时候,想要拿奖就只有2种,这一天上班或者缺勤都可以拿奖。
Just show my code
代码(c++/c)
#include<iostream>
using namespace std;
int C(int m){
return m * (m-1) /2;
}
int main(){
int N ; // 考勤周期的天数N(正整数)
cin >> N;
if(N<2){
cout<<"2"<<endl;
}else{
cout<<1+N+C(N)<<endl;
}
return 0;
}
如果我的文章能帮你节约20秒,就请你为我的文章点个赞吧!