The 14th UESTC Programming Contest Final Warmup D - Cube

117 篇文章 2 订阅
53 篇文章 0 订阅

D - Cube

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
 

As a student of the applied mathematics school of UESTC, WCM likes mathematics. Some day he found an interesting theorem that every 

positive integer's cube can be expressed as the sum of some continuous odd positive integers. For example,

11×11×11=1331=111+113+115+117+119+121+123+125+127+129+131

Facing such a perfect theorem, WCM felt very agitated. But he didn't know how to prove it. He asked his good friend Tom Riddle for help. Tom 

Riddle is a student of the computer science school of UESTC and is skillful at programming. He used the computer to prove the theorem's 

validity easily. Can you also do it?

Given a positive integer  N , you should determine how to express this number as the sum of  N  continuous odd positive integers. You only 

need to output the smallest and the largest number among the  N  integers.

Input

The input contains an integer on the first line, which indicates the number of test cases. Each test case contains one positive integer  N  

on a single line( 0<N1000 ).

Output

For each test case, output two integers on a line, the smallest and the largest number among the  N N continuous odd positive integers 

whose sum is  N×N×N .

Sample input and output

Sample Input Sample Output
2
11
3
111 131
7 11

Source

The 5th UESTC Programming Contest Final
The 14th UESTC Programming Contest Final Warmup
UESTC 80

My Solution

当时看到11*11*11然后后面的中间有个121 (11*11)然后就把思路给秒了,开心。
11×11×11=1331=111+113+115+117+119+121+123+125+127+129+131
又因为是化成n个连续奇数,所以n为奇数是显然,当为偶数时试了2个,只要头 +1 ,尾 -1 输出就好了,轻松秒了,开心☺☺

#include <iostream>
#include <cstdio>
using namespace std;
//偶数时直接通过奇数时的公式,由规律得出
int main()
{
    int T, N;
    scanf("%d", &T);
    while(T--){
        scanf("%d", &N);
        if(N&1) printf("%d %d\n", N*N - (N/2)*2, N*N + (N/2)*2);
        else printf("%d %d\n", N*N - (N/2)*2 + 1, N*N + (N/2)*2 - 1);
    }
    return 0;
}

Thank you!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值