oj1066:キューブ

トピック要件が
記述さ
UESTCは、数学の学校、数学のようなWCMを適用した学生を。ある日、彼はすべての正の整数が連続した正の奇数の整数の三乗の和として表現することができるという興味深い定理を発見しました。例えば、* 11 * 11 = 1331 = 111 + 113 11 + 115 + 117 + 119 + 121 + 123 + 125 + 129 + 127 + 131顔完全定理ので、WCMは興奮。しかし、彼はそれを証明する方法を知りませんでした。彼は良い友人のトム・リドル(トム・リドル)から助けを求めました。トム・リドル(トム・リドル)は、コンピュータサイエンス、電子科学技術大学のアメリカの大学の学生で、プログラミングを専門としています。彼は簡単に定理の妥当性を証明するためにコンピュータを使用しています。また、することができますか?N整数正考えると、あなたは数字が、これは、連続する奇数の正の整数Nの数であると示す方法を決定する必要があります。あなただけの最小限に出力N整数に必要な数と最大数とすることができます。
入力値
入力の最初の行のは、テストケースの数を示す整数を含んでいます。ライン上の各テストケースは、N(0 <N≤1000)整数陽性を含んでいます。
出力
各テストケースについては、ラインに出力二つの整数が、これは正の整数Nの連続する奇数の最小および最大数、N * N * Nの合計であります
入力サンプル
2
11
3
出力サンプル

111 131である
7つの11
キューブと番号が連続項目の奇数と等しい、など
8 = 3 + ... 2 5
27 = 7 + 9 + 3 ... 11
64 = 13 + 15 + ...... 19 17 + 4
125 = 21 + 23 + 25 + 27 + 29 ....... 5
16 = 31 + 33 + 35 + 37 + 39 + 41 ...... 6は
奇数デジタル和が奇数であるので、偶数は、デジタル加算の偶数であり
、奇数ことがわかります中間の数字n*n*n/n偶数であり、真ん中の2つの番号がn*n*n/n*2
あれば、我々が知っているように、最大値maxと最小値の中間デジタルminはnおよび中間の中間との間の関係に応じて解決することができます

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
	int n, m, t;
	cin >> n;
	while (n--)
	{
		cin >> m;
		t = m;
		long long max;
		max = m * m * m;
		int mid;
		mid = max / t;
		if(m%2==1)
			cout << mid - 2 * ((t - 1) / 2)<<" "<<mid+ 2 * ((t - 1) / 2) << endl;
		else
		{
			int left, right;
			left = mid - 1;
			right = mid + 1;
			if (left + right == max)
				cout << left << " " << right << endl;
			else
				cout << left - 2 * ((t - 1) / 2) << " " << right + 2 * ((t - 1) / 2) << endl;
		}
	}
	return 0;
}
公開された38元の記事 ウォン称賛27 ビュー3182

おすすめ

転載: blog.csdn.net/qq_45891413/article/details/104955359
おすすめ