先上题面
、
思路很简单,妈的!!!!
#include<iostream>
#include<string.h>
#include<vector>
#include<math.h>
using namespace std;
typedef struct linenode
{
double k,b;
int type;//1是有斜率的,2是没斜率的
}line;
vector< line >map;
typedef struct node
{
int x;
int y;
} point;
vector< point >pointlist;
int main(){
int xnum=20,ynum=21;
for (int i=0;i<xnum;i++){
for (int j=0;j<ynum;j++){
point a;
a.x=i;
a.y=j;
pointlist.push_back(a);
}
}
for (int i=0;i<pointlist.size();i++){
for(int j=0;j<pointlist.size();j++){
point a=pointlist[i];
point b=pointlist[j];
line temp;
double fm=(a.x-b.x)*1.0;
if(fm==0){
temp.k=0;
temp.b=a.x;
temp.type=2;
}else{
temp.k=((a.y-b.y)*1.0)/fm;
temp.b=a.y*1.0-temp.k*(a.x*1.0);
temp.type=1;
}
int flag=1;
for (int k=0;k<map.size();k++){
line temp1=map[k];
if(fabs(temp1.k-temp.k)<1e-6&&fabs(temp1.b-temp.b)<1e-6&&temp.type==1&&temp1.type==1){
flag=0;
break;
}else if(temp.type==2&&temp1.type==2&&temp1.b==temp.b){
flag=0;
break;
}
}
if(flag==1){
map.push_back(temp);
if(temp.type==1){
cout<<"y="<<temp.k<<"x+"<<temp.b<<" \t\t("<<a.x<<","<<a.y<<")("<<b.x<<","<<b.y<<")"<<endl;
}else{
cout<<"x="<<temp.b<<"\t\t("<<a.x<<","<<a.y<<")("<<b.x<<","<<b.y<<")"<<endl;
}
}
}
}
cout<<map.size();
}
Comments | NOTHING