现在的位置: 首页 > 综合 > 正文

杭电试题1017之简单数学题

2013年10月29日 ⁄ 综合 ⁄ 共 992字 ⁄ 字号 评论关闭

         做到这道题大多数人你可能会遇到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;
}







抱歉!评论已关闭.