题目: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个三角形数之和相关推荐

  1. 输入一个正整数,求它各位数的数字之和

    class Test{ public static void main(String[] args){ int iSum = 0; Scanner scan = new Scanner(System. ...

  2. python输入一个正整数、计算其各个位的数字之和_C语言程序设计:编写程序,输入一个正整数,统计该整数的位数并计算其各个数位上的数字之和。...

    点击查看C语言程序设计:编写程序,输入一个正整数,统计该整数的位数并计算其各个数位上的数字之和.具体信息 答:#include /*包含头文件*/void main() /*主函数*/{ int n, ...

  3. python输入一个正整数、计算其各个位的数字之和_【PAT】Python 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。...

    输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 10的100次方. 输出格式: 在一行内输出 n 的各位数字之和的每一位,拼音数字间有 1 空格,但一行中最后 ...

  4. c语言从键盘输入一个整数判断是否为素数,键盘输入一个正整数,程式设计判断其是否为素数(即质数)...

    键盘输入一个正整数,程式设计判断其是否为素数(即质数)以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 键盘输入一个正整数 ...

  5. python任意输入一个正整数、判断该数是否为素数_Python编程判断一个正整数是否为素数的方法,python素数...

    Python编程判断一个正整数是否为素数的方法,python素数 本文实例讲述了Python编程判断一个正整数是否为素数的方法.分享给大家供大家参考,具体如下: import string impor ...

  6. python输入一个正整数n求下列算式的值_C语言编写程序:输入一个正整数x和一个正整数n,求下列算式的值。,C语言 编写一个程序,输入一个正整数,求出它是几位数。...

    导航:网站首页 > C语言编写程序:输入一个正整数x和一个正整数n,求下列算式的值.,C语言 编写一个程序,输入一个正整数,求出它是几位数. C语言编写程序:输入一个正整数x和一个正整数n,求下 ...

  7. C语言经典例14-将一个正整数分解质因数

    目录 1 题目 2 分析 3 实现 4 运行结果 1 题目 将一个正整数分解质因数.例如:输入909090,打印出 90=2∗3∗3∗590 = 2 * 3 * 3 * 590=2∗3∗3∗5 2 分 ...

  8. C语言 输入一个正整数n,再输入n个字符,如果是小写字符就将其转换为大写字符,如果是大写字符就 转换为小写字符

    题目如下: 输入一个正整数n,再输入n个字符,如果是小写字符就将其转换为大写字符,如果是大写字符就 转换为小写字符 #include<stdio.h>void main() {int n ...

  9. 实现一个函数,对一个正整数n,算得到1

    http://bbs.csdn.net/topics/120115915 实现一个函数,对一个正整数n,算得到1 需要的最少操作次数:如果n 为偶数,将其 除以2:如果n 为奇数,可以加1 或减1:一 ...

最新文章

  1. matlab 仿照案例-目标检测
  2. Google分布式系统三驾马车: GFS,mapreduce,Bigtable
  3. 全局变量初始化顺序探究
  4. R-apply()函数
  5. webpack2 实践系列(二)— entry 和 output
  6. Python 逆向抓取 APP 数据
  7. dubbo源码深度解析_scrapy框架通用爬虫、深度爬虫、分布式爬虫、分布式深度爬虫,源码解析及应用
  8. 我离baidu.com有几跳
  9. Linux设备树OF API 中OF的含义
  10. Unity3D基础21:UI简介
  11. truffle version/usr/local/lib/node_modules/truffle/build/385.bundled.js:65232 catch cli.bundled.js:6
  12. 离散数学计算机专业论文,【计算机专业《离散数学》教学研究】计算机专业离散数学...
  13. cad连筋字体怎么安装_CAD图纸乱码怎么办?送你2800款字体,解决烦人的乱码问题...
  14. matlab 连续傅里叶变换,matlab快速傅里叶变换.ppt
  15. 前端过滤特殊字符、表情包
  16. 263企业邮箱:客户端授权码登录
  17. 计算机所有以太网适配的ip,Win10电脑以太网没有有效的ip配置怎么解决?附上具体解决方法...
  18. python爬虫笔记(1)
  19. 安森美推出ecoSpin系列,重新定义无刷直流电机控制
  20. 飞塔防火墙虚拟服务器,飞塔防火墙模拟(1):模拟器使用方法 | 网络之路博客(公众号同名)(其他平台网络之路Blog)...

热门文章

  1. Redis 分布式方案
  2. maven的java工程取mysql数据库数据
  3. 常见的web应用服务器
  4. 文件上传案例的服务器端
  5. Bootstrap全局css样式_辅助类
  6. Bootstrap全局css样式_代码
  7. 起点linux和深度linux哪个好,我想深入学习linux计算机,但不知道选择哪个版本好?...
  8. 书生阅读器打开gd文件出错_CAJ论文怎么打开?
  9. EFCore笔记之异步查询
  10. 3.2Python的循环结构语句: