解题思路:
统计每个阶乘的个数,记录最小的阶乘(记为maxv)。从最小的阶乘开始计算统计maxv的个数是否为(maxv+1)的倍数
如果是则进位 比如3!+3!+3!+3!+3!+3!+3!+3!==8*3!==2*4! 相当于4!增加了两个,向上循环执行该操作即可
如果不是那么就可以break了
注意事项:
参考代码:
#include<iostream> #include<algorithm> #include<unordered_map> using namespace std; const int N=1e5+10; unordered_map<int,int> M; int A[N]; int main(){ int n; cin>>n; int maxv=2e9; for(int i=1;i<=n;i++) { cin>>A[i]; M[A[i]]++; maxv=min(maxv,A[i]); } while (M.count(maxv)){ if(M[maxv]%(maxv+1)==0) { if(M.count(maxv+1)==0) M[maxv+1]=M[maxv]/(maxv+1); else M[maxv+1]+=M[maxv]/(maxv+1); maxv++; } else break; } cout<<maxv; }
0.0分
19 人评分
去掉双斜杠注释 (C语言代码)浏览:1963 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:705 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:538 |
点我有惊喜!你懂得!浏览:1439 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:600 |
C二级辅导-计负均正 (C语言代码)浏览:556 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:607 |
妹子杀手的故事 (C语言代码)浏览:737 |
A+B for Input-Output Practice (VII) (C++代码)浏览:643 |
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:1090 |