【915程序设计】22西交大软件专硕915程序设计真题讲解

这篇博客包含了三部分编程挑战的解决方案:无人机计分系统、扑克牌连续序列判断和计算机视觉中的子集选择问题。在无人机比赛中,根据颜色和分数对队伍进行排序;在扑克牌游戏中,检查是否能通过添加大王来形成连续序列;在计算机视觉算法中,寻找特定权重组合的子集。这些问题都涉及排序、条件判断和递归搜索策略。
摘要由CSDN通过智能技术生成

27. 无人机

#include<bits/stdc++.h>
using namespace std;

typedef struct{
	string color;
	int score;
}Team;

bool rule(Team a,Team b){
	return a.score>b.score;
}

int N;
int cnt[4]={0};
Team teams[30];

int main(){
	cin>>N;
	for(int i=0;i<N;++i){
		char color;
		cin>>teams[i].score>>color;
		switch(color){
			case 'b': cnt[0]++; teams[i].color="blue"; break;
			case 'r': cnt[1]++; teams[i].color="red"; break;
			case 'g': cnt[2]++; teams[i].color="green"; break;
			case 'p': cnt[3]++; teams[i].color="purple"; break;
		}
	}
	
	sort(teams,teams+N,rule);
	
	cout<<"blue\t"<<cnt[0]<<endl;
	cout<<"red\t"<<cnt[1]<<endl;
	cout<<"green\t"<<cnt[2]<<endl;
	cout<<"purple\t"<<cnt[3]<<endl<<endl;
	for(int i=0;i<N;++i){
		cout<<teams[i].score<<" "<<teams[i].color<<endl;
	}
	return 0;
} 

在这里插入图片描述

28. 扑克牌

#include<bits/stdc++.h>
using namespace std;

vector<int> nums;
int daxiaowang=0;
string pai;

int main(){
	for(int i=0;i<5;++i){
		cin>>pai;
		if(pai=="A"){
			nums.push_back(1); 
		}else if(pai=="2"){
			nums.push_back(2); 
		}else if(pai=="3"){
			nums.push_back(3); 
		}else if(pai=="4"){
			nums.push_back(4); 
		}else if(pai=="5"){
			nums.push_back(5); 
		}else if(pai=="6"){
			nums.push_back(6); 
		}else if(pai=="7"){
			nums.push_back(7); 
		}else if(pai=="8"){
			nums.push_back(8); 
		}else if(pai=="9"){
			nums.push_back(9); 
		}else if(pai=="10"){
			nums.push_back(10); 
		}else if(pai=="J"){
			nums.push_back(11); 
		}else if(pai=="Q"){
			nums.push_back(12); 
		}else if(pai=="K"){
			nums.push_back(13); 
		}else if(pai=="W"){
			++daxiaowang;
		}
	}
	
	sort(nums.begin(),nums.end());
	int cnt=0;
	for(int i=0;i<nums.size()-1;){
		if((nums[i]+1)==nums[i+1]){
			++cnt;
			++i;
		}else if(nums[i]==nums[i+1]){
			cout<<"no";
			return 0;
		}else{
			if(daxiaowang){
				--daxiaowang;
				nums.push_back(nums[i]+1);
				sort(nums.begin(),nums.end());
			}else{
				cout<<"no";
				return 0;
			}
		}
	}
	
	if(cnt+1==5){
		cout<<"yes";
	}else if(nums.size()+daxiaowang==5){
		cout<<"yes";
	}else{
		cout<<"no";
	}

	return 0;
} 

在这里插入图片描述

29. 计算机视觉算法

#include<bits/stdc++.h>
using namespace std;

int N,C;
int W[100];
int cnt;

void f(int i,int C,vector<int>& subset){
	//注意如果不写 &&C!=0 会漏掉所有以W[N-1]结尾的子集
	//注意如果不写 &&C!=0 会漏掉所有以W[N-1]结尾的子集 
	//注意如果不写 &&C!=0 会漏掉所有以W[N-1]结尾的子集  
	if(i==N&&C!=0){		
		return;
	}
	if(C==0){
		++cnt;
		for(int k=0;k<subset.size();++k){
			cout<<subset[k]<<" ";
		}
		cout<<endl;
		return;
	}
	for(int k=i;k<N;++k){
		if(C>=W[k]){
			subset.push_back(W[k]);
			f(k+1,C-W[k],subset);
			subset.pop_back();
		}
	}
}

int main(){
	cin>>N>>C;
	for(int i=0;i<N;++i){
		cin>>W[i];
	}
	sort(W,W+N);
	vector<int> subset;
	f(0,C,subset);
	cout<<"cnt:"<<cnt;
	if(!cnt){
		cout<<"None";
	}
	return 0;
}

在这里插入图片描述

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枯木何日可逢春

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值