蓝桥杯2021 直线

蓝桥杯2021 直线_第1张图片

这道题 求y=k*x+b ,统计斜率,对于竖直的直线和横着的直线,单拉出来。

统计两个点的斜率,最后去重,可以用STL的set容器,表示没有重复数的集合

#include
//集合去重的作用; set
using namespace std;
typedef pair pdd; //用一个队组
set m;   //定义了一个集合(一个集合有好多不重复的元素)
const int N = 30;
pdd a[N*N];  //看作一个结构体里面包含两个元素 
int main() 
{  int t = 0;

   for(int i = 0; i <= 19; i ++)
    for(int j =0; j <= 20; j ++)
    {a[t].first=i,a[t].second=j;   //相当于把每个元素依次存入到pair队组中 
      t++;
    }
   int ans = 20 + 21;
    
   for(int i = 0; i < t; i ++)
   {
	 for(int j = 0; j < t; j ++)
     { if(a[i].first==a[j].first||a[i].second ==a[j].second)
     	continue;
       double k = (a[j].second - a[i].second)/(a[j].first-a[i].first);
       double b = (a[j].first *a[i].second - a[j].second*a[i].first)/(a[j].first - a[i].first); 
	   
	                                                //a[j].second - a[j].first*k;
       m.insert({k,b}); //把斜率和b存入到集合中,集合有去重的作用 
	 }
}
	for(set::iterator it=m.begin(); it!=m.end(); it++)
	{
		ans++;
	}
	cout << ans;

  return 0;
}

set用法

#include
#include
#include
int main()
{   set a,setb, set >c, setd;
    set.insert(a),set.insert(b), set.insert({m,n}),set.insert(d);
    
    迭代器
    begin.() ,end()尾元素的下一个地址,size()大小,empty()空置
    set iterator::it = a.begin(), it!=a.end(), it++
   {  it
   }

}

 

你可能感兴趣的:(蓝桥杯,职场和发展,线性代数)