每一个正整数可以表示为3个三角形数之和
题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5231
题意:给定一个正整数,其中,把用最少的三角形数之和来表示,输出它们。
分析:有一个定理每一个正整数可以表示为3个三角形数之和,所以这样我们可以先判断是否是一个三角形数,如
果是,则直接输出,否则判断是否是两个三角形数之和,如果是,则输出,否则一定就是三个三角形数之和。
在找这些数的时候可以利用二分来求解,这样时间复杂度会比较低。
#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
#include <map>using namespace std;
const int N = 100005;int sum[N];
map<int,int> mp;
int cnt,n;void Init()
{mp.clear();cnt = 1;mp[1] = 1;sum[1] = 1;while(1){if(sum[cnt] > 123456789) break;cnt++;sum[cnt] = sum[cnt-1] + cnt;mp[sum[cnt]] = cnt;}
}bool OK(int x)
{int l = 1;int r = upper_bound(sum,sum+cnt,x) - sum - 1;while(l <= r){if(sum[l] + sum[r] < x)l++;else if(sum[l] + sum[r] > x)r--;else{printf("%d %d",l,r);return true;}}return false;
}int main()
{Init();int T;scanf("%d",&T);while(T--){scanf("%d",&n);if(mp.count(n)){printf("%d\n",mp[n]);continue;}if(OK(n)){puts("");continue;}int up = upper_bound(sum,sum+cnt,n) - sum - 1;for(int i=1;i<=up;i++){if(OK(n-sum[i])){printf(" %d\n",i);break;}}}return 0;
}
每一个正整数可以表示为3个三角形数之和相关推荐
- 输入一个正整数,求它各位数的数字之和
class Test{ public static void main(String[] args){ int iSum = 0; Scanner scan = new Scanner(System. ...
- python输入一个正整数、计算其各个位的数字之和_C语言程序设计:编写程序,输入一个正整数,统计该整数的位数并计算其各个数位上的数字之和。...
点击查看C语言程序设计:编写程序,输入一个正整数,统计该整数的位数并计算其各个数位上的数字之和.具体信息 答:#include /*包含头文件*/void main() /*主函数*/{ int n, ...
- python输入一个正整数、计算其各个位的数字之和_【PAT】Python 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。...
输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10的100次方. 输出格式: 在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后 ...
- c语言从键盘输入一个整数判断是否为素数,键盘输入一个正整数,程式设计判断其是否为素数(即质数)...
键盘输入一个正整数,程式设计判断其是否为素数(即质数)以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 键盘输入一个正整数 ...
- python任意输入一个正整数、判断该数是否为素数_Python编程判断一个正整数是否为素数的方法,python素数...
Python编程判断一个正整数是否为素数的方法,python素数 本文实例讲述了Python编程判断一个正整数是否为素数的方法.分享给大家供大家参考,具体如下: import string impor ...
- python输入一个正整数n求下列算式的值_C语言编写程序:输入一个正整数x和一个正整数n,求下列算式的值。,C语言 编写一个程序,输入一个正整数,求出它是几位数。...
导航:网站首页 > C语言编写程序:输入一个正整数x和一个正整数n,求下列算式的值.,C语言 编写一个程序,输入一个正整数,求出它是几位数. C语言编写程序:输入一个正整数x和一个正整数n,求下 ...
- C语言经典例14-将一个正整数分解质因数
目录 1 题目 2 分析 3 实现 4 运行结果 1 题目 将一个正整数分解质因数.例如:输入909090,打印出 90=2∗3∗3∗590 = 2 * 3 * 3 * 590=2∗3∗3∗5 2 分 ...
- C语言 输入一个正整数n,再输入n个字符,如果是小写字符就将其转换为大写字符,如果是大写字符就 转换为小写字符
题目如下: 输入一个正整数n,再输入n个字符,如果是小写字符就将其转换为大写字符,如果是大写字符就 转换为小写字符 #include<stdio.h>void main() {int n ...
- 实现一个函数,对一个正整数n,算得到1
http://bbs.csdn.net/topics/120115915 实现一个函数,对一个正整数n,算得到1 需要的最少操作次数:如果n 为偶数,将其 除以2:如果n 为奇数,可以加1 或减1:一 ...
最新文章
- matlab 仿照案例-目标检测
- Google分布式系统三驾马车: GFS,mapreduce,Bigtable
- 全局变量初始化顺序探究
- R-apply()函数
- webpack2 实践系列(二)— entry 和 output
- Python 逆向抓取 APP 数据
- dubbo源码深度解析_scrapy框架通用爬虫、深度爬虫、分布式爬虫、分布式深度爬虫,源码解析及应用
- 我离baidu.com有几跳
- Linux设备树OF API 中OF的含义
- Unity3D基础21:UI简介
- truffle version/usr/local/lib/node_modules/truffle/build/385.bundled.js:65232 catch cli.bundled.js:6
- 离散数学计算机专业论文,【计算机专业《离散数学》教学研究】计算机专业离散数学...
- cad连筋字体怎么安装_CAD图纸乱码怎么办?送你2800款字体,解决烦人的乱码问题...
- matlab 连续傅里叶变换,matlab快速傅里叶变换.ppt
- 前端过滤特殊字符、表情包
- 263企业邮箱:客户端授权码登录
- 计算机所有以太网适配的ip,Win10电脑以太网没有有效的ip配置怎么解决?附上具体解决方法...
- python爬虫笔记(1)
- 安森美推出ecoSpin系列,重新定义无刷直流电机控制
- 飞塔防火墙虚拟服务器,飞塔防火墙模拟(1):模拟器使用方法 | 网络之路博客(公众号同名)(其他平台网络之路Blog)...