杭电OJ 1030:Delta-wave
来源:互联网 发布:管家婆软件安装 编辑:程序博客网 时间:2024/05/22 04:35
这是一个完全的数学题目,主要是找规律。
仔细研究可以找到如下规律:
1.关于给定一个n,求其所在的层。 1层:1个数,2层:3,3层:5,4层:7,……(等差,d = 2,a1 = 1,Sn = (a1 + an)/2 = n^2) 看最右边斜列1,4,9,16,……皆为平方数。 所以n所在的层为:ceil(sqrt(n))2.关于网上的左右斜列(或斜行)。 左第一斜列为:1,2,6,5,10,…… 左第二斜列为:4,8,7,13,12,……,以此类推。 右第一斜列为:1,3,4,8,9,15,16,…… 右第二斜列为:2,6,7,13,14,…… 以此类推。3.关于所求为:fabs(lay1 - lay2) + fabs(left_n - left_m) + fabs(right_n - right_m)。 其中lay1,lay2分别为两个数分别所在的层; left_n ,right_n :分别为输入N的所在左右斜列数;(left,right的表达式在代码中,请读者体会) left_m ,right_m :分别为输入M的所在左右斜列数。 至于为何如此,请读者测试几组N,M的数据,体会如上表达式和所求结果的关系。C++代码如下:
#include <stdio.h>#include <math.h>int main(){int lay1,lay2,result;int n,m,left_n,right_n,left_m,right_m;while(scanf("%d %d",&n,&m) != EOF){lay1 = (int)ceil(sqrt((double)n)),lay2 = (int)ceil(sqrt((double)m));left_n = (n - (lay1 - 1)*(lay1 - 1) - 1)/2 + 1, right_n = (lay1 * lay1 - n)/2 + 1;left_m = (m - (lay2 - 1)*(lay2 - 1) - 1)/2 + 1, right_m = (lay2 * lay2 - m)/2 + 1;result = (int)fabs((double)(lay1 - lay2)) + (int)fabs((double)(left_n - left_m)) + (int)fabs((double)(right_n - right_m));printf("%d\n",result);}return 0;}
0 0
- 杭电OJ 1030:Delta-wave
- 杭电OJ——1030 Delta-wave
- 杭电OJ(HDOJ)1030题:Delta-wave
- 杭电 1030 Delta-wave
- 杭电 1030 Delta-wave
- acm 杭电 Delta-wave 1030
- 数学—杭电1030 Delta-wave
- 杭电1030 Delta-wave (找规律)
- 杭电ACM 1030 Delta-wave java代码解析
- 杭电ACM OJ 1030 Delta-wave 3维降2维坐标系法+图的搜索法
- HDU 1030 Delta-wave
- HDU 1030 Delta-wave
- HDU 1030 Delta-wave
- HDU-1030-Delta-wave
- hdu 1030 Delta-wave
- hdu 1030 Delta-wave
- hdu 1030 Delta-Wave+
- 1030 Delta-wave
- 第四周作业-多线程编程
- 推拉踢拽,都不会倒下的电动摩托
- 图像的灰度共生矩阵
- Cracking the coding interview--Q15.5
- 【爱上cocos2d-x之十】动作Action
- 杭电OJ 1030:Delta-wave
- 第四周作业-多线程编程
- Hadoop的思想起源--Google
- java学习笔记(四)-- 实践篇
- 学了三年的PS 全部在这里了,都是精华(photoshop常用操作)
- 标签taglib prefix
- grread捕捉
- 第四周作业-多线程编程
- HashTable与HashMap的区别