[C/C++]员工考勤记录 - 2019校招编程刷题

[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秒,就请你为我的文章点个赞吧!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值