CCF-CSP真题202006-1《线性分类器》

文章讲述了如何使用C语言编写代码,通过输入的点(x,y)和线性方程(u0,u1,u2),判断在给定条件下A点在线上方还是B点在线上方,输出Yes或No的结果。
摘要由CSDN通过智能技术生成

 题目:

 C语言解答:

#include <stdio.h>
#define M 1000000
int x[M],y[M],u0[M],u1[M],u2[M];
int main(){
	int n,m,i,j,z;
	int countA=0,countB=0;
	int count1,count2,count3,count4;
	char type[1000];
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;i++){
		scanf("%d%d%s",&x[i],&y[i],&type[i]);
		if(type[i]=='A'){
			countA++;
		} 
		if(type[i]=='B'){
			countB++;
		}
	}
	for(j=1;j<=m;j++){
		scanf("%d%d%d",&u0[j],&u1[j],&u2[j]);
		
	}
	//分两种情况,A在线上面B在线下面---B在线上面A在线下面 
	for(j=1;j<=m;j++){
		count1=0,count2=0,count3=0,count4=0;
		for(i=1;i<=n;i++){
			z=u0[j]+u1[j]*x[i]+u2[j]*y[i];
			//A在线上面B在线下面
			if(type[i]=='A'&&z>0){
				count1++;
			}
			if(type[i]=='B'&&z<0){
				count2++;
			}
			//B在线上面A在线下面
			if(type[i]=='A'&&z<0){
				count3++;
			}
			if(type[i]=='B'&&z>0){
				count4++;
			}
		}
		if((count1==countA)&&(count2==countB)){
			printf("Yes\n");
		}
		else if((count3==countA)&&(count4==countB)){
			printf("Yes\n");
		}
		else{
			printf("No\n");
		}
		
	}
	
	
	return 0;
} 

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值