做到这道题大多数人你可能会遇到presentation Error。这个比较正常,但是此题是有点不正常,题目的大意是给定的两个整数n和m,数一数的整数对(A,B),要求是0 <A <B <n和(A^2 + B^ 2+ m)/(AB)是一个整数。
它的格式是多输入的第一行是一个整数N,然后空一行,随后由N个输入块。每个输入块是在问题描述中表示的格式。
输出格式包括N输出块。输出块之间有一个空行。
就是说开始有一个数N,在N后面有一个空行,然后是有N个模块,在每个模块内部都有不定的输入m,n的对数,每个模块都是以0 0结束的并且每个模块之间有空行(注意最后一个模块是不需要空行的)。但是有很多同学的却是按照这个来做的,就是不能AC而且持续的presentation Error。这个就是题目的问题了。请看看下面这个例子:
3 这个就是3表示N,后面3个模块每个模块空行注意最后一个不要空行。
还要说一点就是在OJ判断的时候这里是没有空行的,这里只是按照题目来写的,但是答案却没有,这是OJ的错误很多同学都是在这里出错
10 1实际 上很多同学是没有错的,再次说明一下希望可以帮助到还在纠结的同学
2 5 还有一点u型要说明的是题目中a^2是表示平方但是真正的电脑上不是,电脑上表示异或,这里用a*a就好 3 3 在表示 (A^2 + B^ 2+ m)/(AB)是整数时有两中表示方法: 6 8 一是利用取余的方法,结果是整数必定可以整除取余就是0了。 0 0 二十利用强制类型转换,既然是整数,那我让一次变成浮点型的,一次变成整数型的,如果整除的话,两次结果应该是一样的, 下面的代码采用大二种方法最后要注意的是Case中的C要大写 2 9 3 7 0 0 6 6 5 4 9 8 0 0
这里不要多空一行
#include<iostream> using namespace std; int main() { int m,n,M,i,j,k,t,N; cin>>M; for(t=1;t<=M;t++) { N=0; while((cin>>n>>m)&&(m||n)) { k=0; for(i=2;i<n;i++) for(j=1;j<i;j++) if((i*i+j*j+m)/(double(i)*j)==(i*i+j*j+m)/(i*j)) k++; N++; cout<<"Case"<<" "<<N<<":"<<" "<<k<<endl; } if(t<M) cout<<endl; } return 0; }