• 线段上格点的个数


    Description

    线段上格点的个数

    给定平面上的两个格点p1=(x1,y1), p2=(x2,y2),线段p1p2上,除了p1和p2意外一共有几个格点?

    Sample Input

    1 11
    5 3

    Sample Output

    (2,9)(3,7)(4,5)

    题解:

    gcd的应用,如果直接用暴力的话肯定过不去(不过我也没找到这道题的题源,可能是忘了)。
    求出gcd(abs(y2-y1),abs(x2-x1))-1就是格点的个数,然后求出横坐标和纵坐标每次加的数,用起点x,y坐标一直加,加那么多次就行了。

    代码

    #include<iostream>
    #include<cmath>
    using namespace std;
    
    int gcd(int a, int b)
    {
    	if (b == 0)
    		return a;
    	return gcd(b, a%b);
    }
    
    int main()
    {
    	int x1, x2, y1, y2;
    	cin >> x1 >> y1 >> x2 >> y2;
    	int c = (x1 - x2) / gcd(abs(x1 - x2), abs(y1 - y2));
    	int k = (y1 - y2) / gcd(abs(x1 - x2), abs(y1 - y2));
    	int ans = gcd(abs(x1 - x2), abs(y1 - y2)) - 1;
    	while (ans)
    	{
    		x1 -= c;
    		y1 -= k;
    		cout << '(' << x1 << ',' << y1 << ')' << endl;
    		ans--;
    	}
    	system("pause");
    	return 0;
    }
    
  • 相关阅读:
    构造器
    方法
    Arrays常用的类
    栈内存和堆内存
    方法的重载
    数组遍历
    Scanner类
    连接符和三元运算符
    逻辑运算和位运算
    CSAPP笔记(第二章 信息的表示和处理)-02
  • 原文地址:https://www.cnblogs.com/Titordong/p/9609347.html
Copyright © 2020-2023  润新知