2018.5.5:1007 铮铮铁骨

问题描述

        众所周知,const_bh是一位日常混迹于青铜六的玩家,而且还不氪金,每次打游戏都要被尊贵的V9新月会员haozx爆锤。这次他们一起打一个坦克对战游戏,const_bh还是很有志气的,决定要一雪前耻,投入2毛5,志在打败haozx。

const_bh决定买等级为x 到 x+n的所有坦克。而haozx老是和const_bh对战,早已经厌倦胜利,决定买等级为(x+n)+1到(x+n)+n的所有坦克,让const_bh一辆坦克,并且只想和const_bh打平手。

听到这个消息,const_bh还是很高兴的,终于不用输了,他想在省钱的前提下(越高级的坦克肯定越贵啦),从什么等级的坦克开始买才能和haozx打成平局(他可不敢耍花招,否则haozx发现要输了直接上个等级为的坦克自己就凉了)。坦克的战力是其等级的平方,而且最低等级为1。

      比如n=1时,可求得x=3,则const_bh买等级为3和4坦克,haozx买等级为5的坦克,3*3+4*4=5*5,即为打平。

      当然,如果无解,那就输出“noob const_bh”。


输入描述

题目有多组输入.

每行输入一个n(1<= n<= 1000),描述同题目.


输出描述

每个样例输出占一行

如果有解,输出2 * n + 1个数,即所有被购买的坦克等级编号,行末无空格。

如果无解,则输出"noob const_bh"。

样例输入
1
2
样例输出
3 4 5
10 11 12 13 14

来源
第三届山西省大学生程序设计大赛


这个解法可能是因为sum1.sum2的范围超出了导致不能ac,所以这不是本题的正确解法。测试数据22还可以,23再往后就不行了。可以考虑用大整数?

#include<stdio.h>

int main(void){
    int x,i,n,j,m,k;
    unsigned long long sum1,sum2;
    scanf("%d",&n);
    m=0;
    for(i=1;i<=1000;i++){
        sum1=0;
        sum2=0;
        x=i;
        for(j=x;j<=x+n;j++){
            sum1+=j*j;
        }
        for(k=x+n+1;k<=x+n+n;k++){
            sum2+=k*k;
        }
        if(sum1==sum2){
            m=1;
            break;
        }
    }
    if(m)
        for(i=1;i<=2*n+1;i++){
            if(i!=1)
                printf(" ");
            printf("%d",x++);
        }

    else
        printf("noob const_bh");

    return 0;
}


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值