• hihocoder 1186


    1186 : Coordinates

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    Give you two integers P and Q. Let all divisors(因子,约数) of P be X-coordinates. Let all divisors of Q be Y-coordinates(Y坐标).

    For example, when P=6 and Q=2, we can get the coordinates (1,1) (1,2) (2,1) (2,2) (3,1) (3,2) (6,1) (6,2).

    You should print all possible coordinates in the order which is first sorted by X-coordinate when coincides, sorted by Y-coordinate.

    输入

    One line with two integers P and Q(1 <= P, Q <= 10000).

    输出

    The output may contains several lines , each line with two integers Xi and Yi, denoting the coordinates.

    样例输入
    6 2
     样例输出
    1 1
    1 2
    2 1
    2 2
    3 1
    3 2
    6 1
    6 2
     题目大意:
    给定数字P,Q,求出所有P和Q的约数p,q能够组成的不重复数字对(p,q)

    解题思路:
         本题中需要求出P,Q所有约数组成的数字对,因此我们需要先将P,Q两个数字所有的约数分别找出来,再依次组合后输出。求解一个数字P的所有约数,
    可以依次枚举1..P分别进行检查是否能够被P整除,也可以降低复杂度只枚举1..sqrt(P),具体实现可以参考如下伪代码:
     // 枚举 1.. P
    p_count = 0
    For i = 1 .. P
        If (P mod i == 0) Then
            p_divisors[p_count] = i
            p_count = p_count + 1
        End If
    End For

    // 枚举 1 .. sqrt(P)
    p_count = 0
    For i = 1 .. sqrt(P)
        If (P mod i == 0) Then
            p_divisors[p_count] = i
            p_count = p_count + 1
            If (P div i > i) Then
                // 这个判断语句的作用是为了防止当 P 为平方数时
                // 若(P div i >= i)则会将 sqrt(P) 重复加入约数中
                p_divisors[p_count] = P div i
                p_count = p_count + 1
            End If
        End If
    End For
    // 用这种方法得到的约数序列需要进行排序
    Sort(p_divisors)

    在得到p_divisorsq_divisors之后,再通过双重循环,即可将所有的数字对打印出来:

    For i = 0 .. p_count - 1
        For j = 0 .. q_count - 1
            Output(p_divisors[i] + ' ' + q_divisors[j])
        End For
    End For
    

    到此,本题也就顺理解决。

     1 #include <iostream>
     2 #include <cmath>
     3 #include <cstdio>
     4 #include <algorithm>
     5 using namespace std;
     6 
     7 
     8 int p_divisors[5005];
     9 int q_divisors[5005];
    10 
    11 int main(){
    12     int i, j, p, q, p_count = 0, q_count = 0;
    13     scanf("%d %d", &p, &q);
    14     
    15     for(i = 1; i <= p; i++){
    16         if(p % i == 0){
    17             p_divisors[p_count] = i;
    18             p_count++;
    19         }
    20     }
    21     
    22     for(i = 1; i <= q; i++){
    23         if(q % i == 0){
    24             q_divisors[q_count] = i;
    25             q_count++;
    26         }
    27     }
    28     /*
    29     for(int i = 1; i <= sqrt(p); i++){
    30         if(p % i == 0){
    31             p_divisors[p_count] = i;
    32             p_count++;
    33             if(p / i > i){
    34                 p_divisors[p_count] = p / i;
    35                 p_count++;
    36             }
    37         }
    38     }
    39     sort(p_divisors, p_divisors + p_count);
    40     
    41     for(int i = 1; i <= sqrt(q); i++){
    42         if(q % i == 0){
    43             q_divisors[q_count] = i;
    44             q_count++;
    45             if(q / i > i){
    46                 q_divisors[q_count] = q / i;
    47                 q_count++;
    48             }
    49         }
    50     }
    51     sort(q_divisors, q_divisors + q_count);*/
    52 
    53 
    54 
    55     for(i = 0; i < p_count; i++){
    56         for(j = 0; j < q_count; j++){
    57             printf("%d %d
    ", p_divisors[i], q_divisors[j]);
    58         }
    59     }
    60     
    61     return 0;
    62     
    63 }
    
    
  • 相关阅读:
    FFmpegTool 这个是很早以前写得ffmpeg c99部分转C89工具代码
    mmsplayer V2 for IOS 完成. V2 所有汇总
    关于mmsplayer一些电台不支持播放问题说明
    libmpg123 解码库用法
    [置顶] mmsplayer V2 for IOS 完成. V2 所有汇总
    使用lipo合并iPhone模拟器和真机的静态类库
    vbs编程
    Adobe reader查阅PDF文件无法显示中文
    常去的下载网站
    .Net程序设计快速入门——分页设计篇
  • 原文地址:https://www.cnblogs.com/qinduanyinghua/p/5717161.html
Copyright © 2020-2023  润新知