刷题第一天:南邮NOJ完美立方
2016-03-26 16:54
183 查看
完美立方
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte总提交 : 5496 测试通过 : 1443
比赛描述
a3 = b3 + c3 + d3为完美立方等式。例如123 = 63 + 83 + 103 。编写一个程序,对任给的正整数N (N≤100),寻找所有的四元组(a,
b, c, d),使得a3 = b3 + c3 + d3,其中1<a, b, c, d ≤N。
输入
正整数N (N≤100)
输出
每行输出一个完美立方,按照a的值,从小到大依次输出。当两个完美立方等式中a的值相同,则依次按照b、c、d进行非降升序排列输出,即b值小的先输出、然后c值小的先输出、然后d值小的先输出。
样例输入
24
样例输出
Cube = 6, Triple = (3,4,5)
Cube = 12, Triple = (6,8,10)
Cube = 18, Triple = (2,12,16)
Cube = 18, Triple = (9,12,15)
Cube = 19, Triple = (3,10,18)
Cube = 20, Triple = (7,14,17)
Cube = 24, Triple = (12,16,20)
#include <stdio.h>
#include <math.h>
void Cube(int n);
int main()
{
int N,m;
scanf("%d",&N);//读入数据范围
for(m=1;m<=N;m++)
{
Cube(m);
}
return 0;
}
void Cube(int n)//申明Cube函数
{
int i,j,k;
double a,a1,b,c;
a=pow(n,3);//储存n^3的数值
for(i=2;i<n;i++)
{
b=pow(i,3);//在此处计算i^3的值可使下面的循环减少n^2个计算该项的次数,大量节省时间
for(j=i;j<n;j++)
{
c=pow(j,3);//同理此处可节省n次计算j^3的次数
for(k=j;k<n;k++)
{
a1=b+c+pow(k,3);
if(a1==a)
printf("Cube = %d, Triple = (%d,%d,%d)\n",n,i,j,k);//若判断相同则输出
}
}
}
}
程序完善过程中使用了二叉树的结构思想,在计算过程中有三个计算循环,首先假设计算6以内的循环次数,那么就需要计算2,3,4,5,6五组对应数据,例如当n=6时,i的取值可以从2~5,j,k,同理,那么就有数据重复,例如(3,4,5)(4,3,5)等,实际为同一组数据,要使输出的数据仅为从小到大排列的那组,那么通过二叉树结构的分析可以知道,当j从i起始,k从j起始时,数据可以按要求输出。
相关文章推荐
- 分析system_call中断处理过程
- 按钮
- ELKStack实时分析Haproxy访问日志配置
- [从头学数学] 第153节 旋转 小结与复习题
- Leetcode 137. Single Number II
- redis 主从配置
- C++实现双向链表
- HDU 3068 Manacher 模版题
- 关于definer('root'@'%') does not exit解决办法
- 使用python爬取新浪微博的内容
- wordpress如何插入自定义的微博秀
- linux上跑java代码 各种坑
- 第五周项目2:游戏中的角色类(1)
- IOS的一个带动画的多项选择的控件(一)
- bootstrap 简易模版
- 微信证书发布涉及到的问题
- 续 CentOS7(mini) 运行MVC5 + Mariadb
- UILabel 添加图片
- 02-线性结构1 一元多项式的乘法与加法运算 (20分)
- warning: LF will be replaced by CRLF