一个长方形可以由多个正方形组成,然后题目要求根据输入的长方形内部的正方形的总数,来求得有多少个长方形(正方形是特殊的长方形)满足这类条件,并且输出对应的长和宽。

假设正方形单位长度为1,长为m宽为n的长方形,令n<=m,其内部有的正方形总数为: t = m*n + (m-1)*(n-1) + (m-2)*(n-2) + ......+1*(n-m+1) = m*m*n - (m+n)*m*(m-1)/2 + (m-1)*m*(2*m-1)/6;

m*m*n可以由公式化开,将m*n凑在一起,总共有m个m*n;

- (m+n)*m*(m-1)/2由-(m+n)-2(m+n)-......-(m-1)(n+m)再由等差公式得出;

(m-1)*m*(2*m-1)/6 由1 + 4 + 9 +......+(m-1)^2 带入平方和的前a项和 Sa = a*(a+1)*(2*a+1)/6得出;

最后由化简成的公式可以看出三个未知数求出两个,最后一个必然也求的出;

代码中写的时候把行当成m了,列是n,到了行大于列的时候停止;

★题目描述

YY 想找出所有的 <n,m>正整数对使得 n 行 m 列的表格中恰好包含 t 个正方形。

★输入

输入一行,包含一个正整数 t。(1≤t≤10的18次方)(1≤t≤10的18次方)

★输出

第一行输出一个整数 z,表示 <n,m> 对的个数。

接下来包含 z 行,每行两个正整数 n,m,以空格分隔,表示 n 行 m 列的表格中恰好包含 t 个正方形。

注意:输出 <n,m> 对时,以 n 递增的顺序输出,n 相同时以 m 递增的顺序输出。

★输入样例

8

★输出样例

4
1 8
2 3
3 2
8 1

★样例解释

1行8列、2行3列、3行2列、8行1列的表格均恰好包含8个正方形

下图以2行3列为例:

#include<stdio.h>
#include<iostream>
#define Maxn 1000
using namespace std;
#define c cout //定义输出
#define e endl //定义换行
long long int func(long long int m,long long int n,long long int t){//不断筛选合适的loc,返回 int flag = 1;long long int loc=n,lef=m,rig=n,x=0;while(1){x = m*(m+1)*(3*loc+1-m)/6;if(lef==rig&&x!=t){//没有值可以二分并且计算出的结果与t不符,返回 return 0;}if(lef+1==rig&&x!=t){//lef和rig的值恰好相隔1,并且两个指标带入loc,得出的x的值位于t两边,返回 return 0;}if(x==t)//找到想要的loc,返回,否则不断缩小二分区间 return loc;else if(x>t){rig = loc;loc = (rig+lef)/2;}else{lef = loc;loc = (rig+lef)/2;}}if(!flag)return 0;
}
int main(){long long int m=1,n=0,x=0,t=0;long long mi[Maxn],ni[Maxn];while(scanf("%lld",&t)!=EOF){int count=1;m=1,x=0;n = t;while(1){n = (t*6/(m*(m+1))+m-1)/3;//m每次自加,n的范围也要对应的缩小,不能整除的话n会偏小(不能整除那就说明这个m和n的组合是不能推出t的),传入func以后得出来的值一定不会超过t //相反的,能整除,实际上也说明这个n值就是所求的n值。 将其带入func,第一步就能运算得出所要的loc并且返回//带入func更多的只是为了验算 x = func(m,n,t);if(m>n)break;if(x){n = x;mi[count] = m;ni[count++] = n;}            m++;  }count-=1;if(ni[count]!=mi[count]){c<<2*count<<e;for(int i=1;i<=count;i++)c<<mi[i]<<" "<<ni[i]<<e;for(int i=count;i>0;i--)c<<ni[i]<<" "<<mi[i]<<e;}else {c<<2*count-1<<e;for(int i=1;i<=count;i++)c<<mi[i]<<" "<<ni[i]<<e;for(int i=count-1;i>0;i--)c<<ni[i]<<" "<<mi[i]<<e;}} return 0;
} 

长方形内正方形Square相关推荐

  1. python实现四种基本图形的面积计算 :圆形,长方形,正方形,梯形。

    这个小练习实现了四种基本图形的面积计算 :圆形,长方形,正方形,梯形.虽然看起来挺简单的,但是要规避的坑还是挺多的(比如用户输入中文的错误显示,还有半径,长宽高必须大于0,用户输入小数也是正确的),感 ...

  2. 长方形与圆最近连线LISP_“认识长方形,正方形和圆”教学实录与评析

    教材:苏教版国标本小学数学一年级(下)"认识图形"第一课时P40-42内容. 教学过程: 一.创设情境,导入新课 师:同学们都玩过搭积木的游戏,今天,朱老师带领同学们去参观图形王国 ...

  3. 三角形、长方形、正方形、梯形、圆等的周长计算公式和面积计算公式

    参考:http://iask.sina.com.cn/b/9499520.html 三角形.长方形.正方形.梯形.圆等的周长计算公式和面积计算公式? 周长:Girth        面积:Area 1 ...

  4. 长方形与圆最近连线LISP_常见图形,圆形、长方形和正方形面积的计算

    编程计算图形的面积: 程序可计算圆形.长方形.正方形的面积,运行时先提示用户选择图形的类型, 然后,对圆形要求用户输入半径值,对长方形要求用户输入长和宽的值, 对正方形要求用户输入边长的值,计算出面积 ...

  5. 计算正方形面积和周长_寒假作业:长方形、正方形周长面积应用题,附答案

    相信不少小朋友已经完成寒假作业了,在完成寒假作业的时候,你遇到了哪些问题呢? 三四年级的小朋友可能会遇到倍数关系.长方形.正方形周长和面积的问题,大部分的小朋友是无法理解题意导致的错误.在做方形的周长 ...

  6. 计算正方形面积和周长_小学三年级数学下册长方形和正方形面积计算练习题(无答案)...

    长方形和正方形面积计算练习题 1.一个长方形长是5厘米,宽是3厘米,面积是(    ),周长是(    ). 2.正方形的边长是(    )分米,面积是4平方分米,周长是(     )分米. 3.一个 ...

  7. python编程一个正方体的代码_Linux Shell经典面试题之请用shell或Python编写一个正方形(square.sh),接受用户输入的数字...

    Linux Shell经典面试题 1.请用shell或Python编写一个正方形(square.sh),接受用户输入的数字. [root@oldboy ~]# sh square1.sh Please ...

  8. 常见图形,圆形、长方形和正方形面积的计算

    编程计算图形的面积: 程序可计算圆形.长方形.正方形的面积,运行时先提示用户选择图形的类型, 然后,对圆形要求用户输入半径值,对长方形要求用户输入长和宽的值, 对正方形要求用户输入边长的值,计算出面积 ...

  9. 凹形长方形的周长计算_【原创】奥数解析(二十九)长方形和正方形的周长

    四年级奥数解析(二十九)长方形和正方形的周长 <奥赛天天练>第29讲<长方形和正方形的周长>,学习求一些较复杂的周长问题. 一.长方形.正方形周长的基本公式为: 长方形周长=( ...

  10. 关于在大长方形内放小长方形的最少数目问题

    关于在大长方形内放小长方形的最少数目问题. 题意简述: 有一个

最新文章

  1. 跳一跳python源码下载_Python玩跳一跳【简】
  2. centos6.5下升级gnutls
  3. c++ 为什么要按它们声明的顺序初始化成员变量?
  4. C#中哈希表(HashTable)的用法详解
  5. 中国替代运动器材市场趋势报告、技术动态创新及市场预测
  6. 研究员轻松劫持2.8万台打印机
  7. android创建Menu菜单
  8. 吴恩达神经网络和深度学习-学习笔记-8-梯度消失与爆炸 + 梯度检测
  9. HDOJ--2000--ASCII码排序(java实现)
  10. 【学亮IT手记】Ajax跨域问题精讲--jQuery解决跨域操作
  11. solaris中如何新建一个用户登录
  12. python分词工具
  13. cmos逻辑门传输延迟时间_什么是TTL电平、CMOS电平?区别是什么?
  14. 便捷缴费 支付 (一)
  15. fastjsonfastjson 1.2.24 反序列化导致任意命令执行
  16. 基于Gensim的Word2Vec的应用
  17. ckeditor5快速使用
  18. java使用Map缓存
  19. 一千万条数据,怎么快速查询
  20. 360 mysql读写分离_基于360的Atlas中间件实现MySQL的读写分离

热门文章

  1. 漏洞扫描工具Nessus的下载与安装教程
  2. ASLD 高级固体激光器设计及仿真软件
  3. 新技术计算机的案例,计算机新技术
  4. android三指截屏apk,手机也能截长图!360 OS三指截屏详解
  5. 80386汇编_寄存器 寻址方式介绍
  6. docker装LibreELEC_瞎弄 篇一:J3455NUC虚拟机安装LibreELEC核显直通HDMI输出
  7. php 在线调用音乐播放器,使用HTML5实现网页音乐播放器
  8. 一周小结(2019/12/23)
  9. python爬虫国内外研究现状
  10. Windows10系统如何开启和关闭隐藏的卓越性能模式