hdu 1017

来源:互联网 发布:linux 获取项目路径 编辑:程序博客网 时间:2024/05/20 06:38

题目概述

给定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-6int 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

0 0
原创粉丝点击