zoukankan      html  css  js  c++  java
  • ZOJ Problem Set–1152 A Mathematical Curiosity

    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;
    
    }
  • 相关阅读:
    js021-Ajax与Comet
    Android之应用程序基础
    Android之项目的目录结构
    Android之ContentProvider组件
    Android之BroadcastReceiver组件
    Android之Activity组件
    Android之Service组件
    2.绘制简单的几何图形
    1.一个简单的OpenGL程序
    2.由深拷贝和浅拷贝引发的写时拷贝技术
  • 原文地址:https://www.cnblogs.com/malloc/p/2400461.html
Copyright © 2011-2022 走看看