Time Limit: 2 Seconds Memory Limit: 65536 KB
Given two integers n and m, count the number of pairs of integers (a,b) such that 0 < a < b < n and (a^2+b^2 +m)/(ab) is an integer.
This problem contains multiple test cases!
The first line of a multiple input is an integer N, then a blank line followed by N input blocks. Each input block is in the format indicated in the problem description. There is a blank line between input blocks.
The output format consists of N output blocks. There is a blank line between output blocks.
Input
You will be given a number of cases in the input. Each case is specified by a line containing the integers n and m. The end of input is indicated by a case in which n = m = 0. You may assume that 0 < n <= 100.
Output
For each case, print the case number as well as the number of pairs (a,b) satisfying the given property. Print the output for each case on one line in the format as shown below.
Sample Input
1
10 1
20 3
30 4
0 0
Sample Output
Case 1: 2
Case 2: 4
Case 3: 5
Source: East Central North America 1999, Practice
重点在输出格式的控制,还有终止条件的判断,还有一点,就是浮点数不能直接用于比较,如果是整除的话,直接判断余数就可以了。解题代码如下:
#include<iostream>#include<sstream>#include<algorithm>using namespace std;int main()
{int blocks;cin>>blocks;
for(int block = 0; block < blocks; block++){string state;
if(block == 0)//仅在第一次的时候有如下两个空行{getline(cin,state);//用getline 吃掉输入blocks之后的回车
getline(cin,state);//题目要求的空行
}int n,m;
int cases = 1;
while(cin>>n>>m && (n || m))//我错在这里了,要同时为0的时候才终止,我用了n && m 怪不得一直WA 呢{int count = 0;
for(int a = 1; a < n; a++){for(int b = a + 1; b < n; b++){int den = a*a + b*b + m;
int mol = a*b;
if(den%mol == 0)
{count++;}}}cout<<"Case "<<cases<<": "<<count<<endl;cases++;}if(block != blocks - 1)//最后一次输出没有空行{cout<<endl;}}return 0;
}