【贪心】nyoj91
来源:互联网 发布:java特种兵 编辑:程序博客网 时间:2024/05/14 19:00
这道题目的思路是借鉴别人的。
思路:找到值小于n的且值为最大的那个数的阶乘;
阶乘之和
时间限制:3000 ms | 内存限制:65535 KB
难度:3
- 描述
给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No;
- 输入
- 第一行有一个整数0<m<100,表示有m组测试数据;
每组测试数据有一个正整数n<1000000; - 输出
- 如果符合条件,输出Yes,否则输出No;
- 样例输入
2
9
10
- 样例输出
Yes
No
#include<iostream>#include<stdio.h>#include<cstring>#include<cstdlib>#include<cmath>#include<algorithm>using namespace std;int JC[11]= {0, 1, 2, 6 ,24, 120, 720 ,5040 ,40320 ,362880 ,3628800};int main(){ int m,i; scanf("%d",&m); while(m--) { int n,sum=0,flag=0,j=10; scanf("%d",&n); int n1=n; for(i=j;i>=1;i--) { if(JC[i]<=n1) { sum+=JC[i]; //计算sum的值与n比较; n1-=JC[i];// printf("%d ",JC[i]); j=i-1; } if(sum==n) flag=1; if(sum>=n||j==0) //跳出循环的条件,j如果等于0就要跳出循环,因为没有0!及比0更小的阶乘; break; } if(flag) printf("Yes\n"); else printf("No\n"); } return 0;}
思路为借鉴,在设计代码时刚开始时让n减去小于n的最大的阶乘;
zhihou gaibian silu ,n1=n向下减,,同时之后加一个变量sum,让sum加上小于n的最大的阶乘;
注意break条件!
0 0
- 【贪心】nyoj91
- NYOJ91——阶乘之和(贪心)
- 贪心算法之——阶乘之和(nyoj91)
- nyoj91 阶乘之和
- 南阳理工oj_91&NYOJ91
- NYOJ91阶乘之和
- nyoj91 阶乘之和
- nyoj91 阶乘之和
- nyoj91阶乘之和
- NYOJ91阶乘之和
- nyoj91 阶乘之和 简单DFS
- NYOJ91 阶乘之和 与全加器设计Verilog HDL
- 贪心!
- 贪心~
- 贪心
- 贪心
- 贪心
- 贪心
- C++里的花括号{},块,作用域
- 归并排序求逆序对
- Boost学习之可移植路径操作--filesystem
- i.MX6ULL -- 架构图
- LeetCode 436. Find Right Interval 题解(C++)
- 【贪心】nyoj91
- 一天一条Linux指令-exit
- H5-跨文档消息通信
- c程序设计语言 习题1-9
- 集合
- NYOJ - 42 - 一笔画问题(欧拉回路,DFS)
- C#49课的主要内容
- 51nod-【1013 3的幂的和】
- 【题】【(堆/线段树/树状数组优化DP)/图论】NKOJ 3485 数据