hihocoder #1186 : Coordinates

来源:互联网 发布:cda数据分析师 知乎 编辑:程序博客网 时间:2024/06/11 17:02

微软预科生计划-探星夏令营在线测试

时间限制: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.

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 11 22 12 23 13 26 16 2

  这个题目就是要找出输入的P和Q的所有约数,然后把约数按照先P后Q的顺序,从小到大排列所有组合”Pi Qi”,并输出。主要任务是找约数,其实找到数的一半就行。也就是说,找P的约数,只要从1找到P/2就行了。由于不知道每个约数的多少。因此使用了vector容器,找到一个 塞进去一个。P和Q都找完了以后,按照首先按照P的大小排列,再按照Q的大小排列的原则,输出结果。
  下面是AC的代码(leetcode风格):
  

//Coordinates#include<iostream>#include<string>#include<stdio.h>#include<vector>using namespace std;vector<int> X;//用来存放P的约数vector<int> Y;//用来存放Q的约数class Solution {public:    int FindHi()    {        int N = 0, M = 0;        cin >> N >> M;//输入P Q        for (int i = 1; i <= N/2; i++)//将P的约数塞入        {            if (!(N%i)) {                X.push_back(i);            }        }        X.push_back(N);//记得P自己也是约数        for (int i = 1; i <= M / 2; i++)//将Q的约数塞入        {            if (!(M%i)) {                Y.push_back(i);            }        }        Y.push_back(M);//记得Q自己也是约数        for (int i = 0; i < X.size(); i++)//P优先        {            for (int j = 0; j < Y.size(); j++)//Q其次            {                cout << X[i] << " " << Y[j] << endl;//注意中间有空格            }        }        return 0;    }};int main(){    Solution sol;    sol.FindHi();    system("pause");    return 0;}如果有问题,欢迎讨论
0 0
原创粉丝点击