博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
阶乘之和http://acm.nyist.net/JudgeOnline/problem.php?pid=91
阅读量:7122 次
发布时间:2019-06-28

本文共 889 字,大约阅读时间需要 2 分钟。

 

阶乘之和

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
 
描述

给你一个非负数整数n,判断n是不是一些数(这些数不允许重复使用,且为正数)的阶乘之和,如9=1!+2!+3!,如果是,则输出Yes,否则输出No;

 
输入
第一行有一个整数0<m<100,表示有m组测试数据;
每组测试数据有一个正整数n<1000000;
输出
如果符合条件,输出Yes,否则输出No;
样例输入
2910
样例输出
YesNo
#include
int fun1(int n){ int i=1,s=1; for(i=1;i<=n;i++) { s=s*i; if(s==n) return 1; else if(s*(i+1)>n) { break; } } if(n>=2*s) return 0; else { n-=s; fun1(n); }}int main(){ int m; scanf("%d",&m); while(m--) { int n; scanf("%d",&n); if(fun1(n)) printf("Yes\n"); else printf("No\n"); }}

这题不愧为贪心算法!我做这题做了两个小时,思路是对的,我就是没处理好阶乘时的问题才没做出来。S是小于等于整数N的第一最近N的某一个数的阶乘。我求这个S时犯了好多错误,千万不要让S=S/(i-1);那种形式,一定要干净利落的写出一个S否则就会出错。这题原理很简单,我们都知道N!必定大于前面N-1项阶乘的和,因为阶乘的倍数增长的太快了。加法就没法和它比,所以,我们就从S出发,当S*N>N-S>=S的时候,你感觉还会N还会是一些数的阶乘吗?肯定不会。如果S==N,那就说明正好有整数的阶乘与其相等,所以我利用递归让N=N-S;直到有N==S或者有N>=S的结果时就可以做出判断了!

转载于:https://www.cnblogs.com/wangyouxuan/p/3260903.html

你可能感兴趣的文章
负载均衡7层nginx(提供软件包)
查看>>
python 数据类型学习
查看>>
Hello,World
查看>>
Linux的用户和组命令之groupmod
查看>>
在windows上秒开应用程序
查看>>
HTML快速入门4
查看>>
JQUERY中字符串和JSON的转换
查看>>
三句话告诉你 mapreduce 中MAP进程的数量怎么控制?
查看>>
wxWidgets第十六课 wxTimer没有调用stop导致崩溃的问题分析
查看>>
centos7.x rsync+inotify实时监控备份
查看>>
LNMP环境下的Nagios搭建
查看>>
spring ioc 注入List/Map等
查看>>
5.理想中的Redis5.1 第二代Codis
查看>>
网络通信第四课 C++发送Post请求的完整案例
查看>>
Grafana基础配置文件
查看>>
云快报斩获“2017中国智能费用管理平台年度产品”大奖
查看>>
Linux文件系统之RAID
查看>>
js之ie浏览器兼容问题
查看>>
pgpool 简明使用教程
查看>>
安装CentOS 6.5时出现detecting hardware然后就停止不动解决
查看>>