第十九次CCF CSP认证题目——线性分类器 C语言

题目描述

第十九次CCF CSP认证题目——线性分类器 C语言_第1张图片

解题思路

1.对于输入的坐标点使用最大数组保存。

2.对于判断A、B类点,首先根据第一个点的类别,设置分类的flag,那么对另一个类别就是对立的flag值,而设置flag的操作时原子操作,需要一次性完成。

3.对于分类的依据,是数学中的点与直线的关系,点在直线上,则带入点的坐标与直线的三个参数计算结果为0;点在直线上方则带入点的坐标与直线的三个参数计算结果大于0;点在直线的下方则带入点的坐标与直线的三个参数计算结果小于0.

源代码

#include 

int main(){
	int m,n;
	int k0,k1,k2;  //每个直线的三个参数 
	char result[21] ; //保存结果的指针,可以使用数组,但是为了优化空间 
	int x[1001],y[1001]; //每个坐标的三个x与y值 
	char c[1001]; //每个坐标的类别
	int i,j;
	short flagA,flagB,flagR,flag;
	scanf("%d%d",&m,&n);
	for(i=0;i 0){ //A类坐标位于直线上方 
					if(i==0){
						flagA=1;
						flagB=0;
					}
					else{
						if(flagA == 0 && flagR == 0){  
							result[j]='N';
							flagR=1;
							break;	
						}
					}		
				}
				else{ //A类坐标位于直线下方
					if(i==0){
						flagA=0;
						flagB=1;
					}
					else{
						if(flagA == 1 && flagR == 0){
							result[j]='N';
							flagR=1;
							break;
						}
					}
					
				}
			}
			else{								//坐标标志为B 
				if(k0+k1*x[i]+k2*y[i] > 0){ //B类坐标位于直线上方 
					if(i==0){
						flagA=0;
						flagB=1;
					}
					else{
						if(flagB == 0 && flagR == 0){
							result[j]='N';
							flagR=1;
							break;
						}
					}					
				}
				else{ //B类坐标位于直线下方
					if(i==0){
						flagA=1;
						flagB=0;
					}
					else{
						if(flagB == 1 && flagR == 0){
							result[j]='N';
							flagR=1;
							break;
						}
					}	
				}
			}		
		}
		if(flag==0 && flagR==0){
			result[j]='Y';
		}
	}
	for(j=0;j

运行结果

你可能感兴趣的:(CSP,第十九次,CSP,CCF,CSP,C语言,源代码)