三角形数

三角形数

时间限制(普通/Java):1000MS/3000MS          运行内存限制:65536KByte

总提交:460            测试通过:114

描述

一定数目的点或圆在等距离的排列下可以形成一个等边三角形,这样的数被称为三角形数。比如10个点可以组成一个等边三角形,因此10是一个三角形数:

    x

   x x

  x x x

 x x x x

开始18个三角形数是13610152128364555667891、105、120、136、153、171。

请求出第n个三角形数。

输入

输入数据包含多组测试用例。

每组测试用例为一个整数N,长度不超100。

输出

对于每组测试用例,输出对应的三角形数。

样例输入

1

2

3

4

5

11111111

样例输出

1

3

6

10

15

61728399382716

题目来源

南京邮电大学计算机学院首届ACM程序设计大赛(2009)

分析:显然大数运算。不知道怎么个大数,实在想不出,求助百度,都是Java的BigInteger,只好又自己想了。

最后:高斯求和~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

(首项+末项)*项数/2。

输入char型数组input[]转换成int数组a[],int数组b[]为a数组加上1得到的。为了方便相乘,数组a和b都是和正常的顺序相反的。

然后a数组和b数组相乘得到数组c。

for(int i=0;i<N;i++)
	{
		for(int j=0;j<N;j++)
		{
			c[i+j] += a[i] * b[j];
		}
	}
	for(int i=0; i<2*N-1;i++)
	{
		c[i+1] += c[i]/10;
		c[i] = c[i]%10;
	}  

为了除以2,将数组c倒过来变成正常的顺序,再除以2。

int remainder = 0; // 余数
	for(int i=0;i<num;i++)
	{
		int tmp = remainder*10 + a[i];
		output[i] = tmp / 2;
		remainder = tmp % 2;
	}

不过运行时间有点长。。。在想想有什么简便的方法?

暂时没想到 

三角形数,布布扣,bubuko.com

时间: 2024-11-07 17:08:50

三角形数的相关文章

hdu 5312 Sequence(数学推导——三角形数)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5312 Sequence Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 1336    Accepted Submission(s): 410 Problem Description Today, Soda has learned a

三角形数且是完全平方数

三角形数:an=n*(n+1)/2; 完全平方数:bn=c^2; 既是三角形数又是完全平方数:An=6*A(n-1)-A(n-2)+2; A[23]={ 0, 1, 8, 49, 288, 1681, 9800, 57121, 332928, 1940449, 11309768, 65918161, 384199200, 2239277041, 13051463048, 76069501249, 443365544448, 2584123765441, 15061377048200, 87784

HDU 5312 Sequence(三角形数应用)——BestCoder 1st Anniversary ($)

传送门 Sequence Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1424    Accepted Submission(s): 442 Problem Description Today, Soda has learned a sequence whose n-th (n≥1) item is 3n(n?1)+1. Now

hdu 5312 Sequence 三角形数

这道题可以用三角形数的性质解出来,所谓三角形数就是n*(n-1)/2其中n>2.就是1,3,6,10--,也可以表示为 n*(n+1)/2...性质:任何一个正整数最多用三个三角形数就可以表示出来,这道题是3*n*(n-1)+1,就可以 表示为6*(n*(n-1)/2)+1,假如m需要k(k>=3)个数来表示,就相当于6*(k个三角形数的和)+k = m:所以 只要判断(m-k)%6是否等于0就可以了.需要一个或两个数的时候需要特判一下.通过这道题了解了三角形数的这个神性质 贴代码: #inc

hdu 5312 三角形数 二分查找

Sequence Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 891    Accepted Submission(s): 271 Problem Description Today, Soda has learned a sequence whose n-th(n≥1) item is 3n(n?1)+1. Now he wa

HDU 5312-Sequence(三角形数+推导)

题目地址:HDU 5312 题意:Soda习得了一个数列, 数列的第nn (n \ge 1)(n≥1)项是3n(n-1)+13n(n?1)+1. 现在他想知道对于一个给定的整数mm, 是否可以表示成若干项上述数列的和. 如果可以, 那么需要的最小项数是多少?例如, 22可以表示为7+7+7+17+7+7+1, 也可以表示为19+1+1+119+1+1+1. 思路: 三角形数形如n*(n-1)/2,他们形成的数列是1,3,6,10.......,同样也可以表示成n*(n+1)/2(表示方式不同).

一道简单的算法题(三角形数阵)

今天同学给了几个算法题,看了一遍,觉得第一道题简单,试着写了一下,果然很简单. 题目是 核心代码只有 for(var i= 0; i< N; i++){ str += '<div class="item">'; for(var j= 0; j< N-i; j++){ str += '<div class="list">'+ start +'</div>'; start++; if(start > T){ star

EularProject 42:单词解码出来的三角形数

Coded triangle numbers Problem 42 The nth term of the sequence of triangle numbers is given by, tn = ?n(n+1); so the first ten triangle numbers are: 1, 3, 6, 10, 15, 21, 28, 36, 45, 55, - By converting each letter in a word to a number corresponding

三角形问题:dfs的一个弊端。

有一个三角形数阵,行数和列数相等,第n行有n个数字,现在从上顶点,也就是第一行第一列出发,只能向左下或者向右下走到下一行,一直走到末尾,求怎么能使路径上的数字和最大,求这个最大值. 第一行是一个数m,代表测试次数:对于每一次测试:第一行是一个数n(1<n<100),代表这个三角形数阵有n行,接着是n行的一个三角形数阵(对于每一个数都有1<Aij<100). 例如:输入: 1 5 7 3   8 8   1   0 2   7   4   4 4   5   2   6   5 输出