hdu 1017

题目概述

给定N和M,求满足以下条件的整数对(a,b)的数量,其一,0< a< b< N,其二,(a^2+b^2+M)/(ab)为整数

输入

第一行正整数times,其后有times块数据,每块数据由若干行组成,每行两个整数N,M,每块数据以0 0结束

限制

0

输出

每组输出格式为Case #: @,其中#为数据在该块的序数,@为所求数量,两组输出之间没有空行,两块数据的输出之间有一个空行

样例输入

2

10 1
20 3
30 4
0 0

10 1
20 3
30 4
0 0

样例输出

Case 1: 2
Case 2: 4
Case 3: 5

Case 1: 2
Case 2: 4
Case 3: 5

讨论

题目本身毫无难度,不是深搜,是暴搜,两层循环的事情,只是题目原文描述没讲清楚格式,可能导致各种花样WA

题解状态

265MS,1720K,767 B,C++

题解代码

#include<stdio.h>
#include<algorithm>
using namespace std;
#define INF 0x3f3f3f3f  
#define maxx(a,b) ((a)>(b)?(a):(b))  
#define minn(a,b) ((a)<(b)?(a):(b))  
#define MAXN 21
#define memset0(a) memset(a,0,sizeof(a))

#define EPS 1e-6
int N, M;
int kase = 0;
void fun()
{
    int cnt = 0;
    for (int a = 1; a < N; a++) {
        for (int b = a + 1; b < N; b++)
            if (double(a*a + b*b + M) / double(a*b) - (a*a + b*b + M) / (a*b) < EPS)//以浮点型与由整型提升所得的浮点型作差 小数部分在浮点误差之内则视为整数
                cnt++;
    }
    printf("Case %d: %d\n", ++kase, cnt);
}
int main(void)
{
    //freopen("vs_cin.txt", "r", stdin);
    //freopen("vs_cout.txt", "w", stdout);

    int times;
    scanf("%d", &times);
    while (times--) {
        while (scanf("%d%d", &N, &M) && (N || M))
            fun();
        kase = 0;//每块数据的序号是不共用的
        if (times)
            printf("\n");//新的控制输出间空行方法 不用再插旗了
    }
}

EOF

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值