河工oj(1101-1113)

1101 求组合数(函数专题)

代码

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

int fact(int n) {
	int res = 1;
	while(n) {
		res *= n--;
	}
	return res;
} 

int main() {
	int m, k;
	cin >> m >> k;
	cout << fact(m)/fact(k)/fact(m-k) << endl;
	return 0;
}

1102 计算退票费(函数专题)

代码

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

double CancelFee(double p) {
	double fee = p*0.05;
	int f = p*0.05;
	double xs = fee-f;
	if(xs<0.05) xs = 0;
	else if(xs>=0.75) xs = 1;
	else xs = 0.5;
	return xs+1.0*f;
}

int main() {
	double p;
	cin >> p;
	printf("%.1lf\n",CancelFee(p));
	return 0;
}

1103 回文数

代码(stl的compare)

截取前后

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

bool solve(int n) {
	string s = to_string(n);
	int len = s.size();
	int i = len/2; // 位序 
	string s1 = s.substr(0,i);
	if(len&1) i ++; //中间独子的位序 
	string s2 = s.substr(i,len-i);
	reverse(s2.begin(),s2.end());
	if(s2.compare(s1)==0) return true;
	else return false;
	 
}

int main() {
	int m, n;
	cin >> m >> n;
	for(int i = m; i <= n; i ++) {
		if(solve(i)) cout << i << " ";
	}
	return 0;
}

代码2(双指针算法)

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

bool solve(int n) {
	string s = to_string(n);
	// 这里判断条件不能是指针相遇(i==j)
	// 应该是相遇或相互错过,因为两位数时,各自加1和减1相当于位置互换,不相遇 
	for(int i = 0, j = s.size()-1; i < j; i++, j --) {
		if(s[i]!=s[j]) return false;
	} 
	return true;
}

int main() {
	int m, n;
	cin >> m >> n;
	for(int i = m; i <= n; i ++) {
		if(solve(i)) cout << i << " ";
	}
	return 0;
}

1104 不确定进制转换

代码

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

int main() {
	int n, k;
	cin >> n >> k;
	int flag = 1;
	if(n == 0) {
		cout << 0 << endl;
		return 0;
	}
	if(n<0) {
		flag = -flag;
		n = -n;
	}
	vector<int> a;
	while(n) {
		a.push_back(n%k);
		n /= k;
	}
	if(flag==-1) cout << "-";
	for(int i = a.size()-1; i >= 0; i --) cout << a[i];
	return 0;
}

1105 求最大数(函数的嵌套调用)

代码1

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

int main () {
	int a, b, c;
	cin >> a >> b >> c;
	if(a<b) swap(a,b);
	if(a<c) swap(a,c);
	if(b<c) swap(b,c);
	cout << a << endl;
	return 0;
}

代码2

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

int main () {
	vector<int> a;
	for(int i = 0; i < 3; i ++) {
		int x; cin >> x;
		a.push_back(x);
	} 
	sort(a.begin(),a.end());
	cout << a[2] << endl;
	return 0;
}

代码3

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

int main () {
	int a[3];
	for(int i = 0; i < 3; i ++) cin >> a[i];
	sort(a,a+3);
	cout << a[2] << endl;
	return 0;
}

1106 求n!(递归函数)

代码(非递归)

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

int main() {
	int n;
	cin >> n;
	int res = 1;
	while(n) {
		res *= n--;
	} 
	cout << res << endl;
	
	return 0;
}

代码2(递归)

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

int solve(int n) {
	if(n == 1) return 1;
	return n*solve(n-1);
}

int main() {
	int n;
	cin >> n;
	cout << solve(n) << endl;
	
	return 0;
}

1107 汉诺塔

代码 

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

void Move(int n,char a,char b,char c) {
	if(n == 1) {
		cout << a << "->" << c << endl; 
		return ;
	}
	if(n == 2) {
		cout << a << "->" << b << endl;
		cout << a << "->" << c << endl;
		cout << b << "->" << c << endl;
		return ;
	}
	Move(n-1,a,c,b);
	Move(1,a,b,c);
	Move(n-1,b,a,c);
	return ;
}

int main() {
	int n;
	cin >> n;
	Move(n,'A','B','C');
	
	return 0;
}

代码2(非递归,模拟递归工作栈)

移动结构: a 借助b 移动到 c

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

// 汉诺塔移动结构 
struct hnoi {
	int num;
	char a;
	char b;
	char c;
};

const int N = 1e5+10;
hnoi h[N]; int hh = 0, tt = 0;

void solve(int n,char a, char b,char c) {
	// 入栈 
	h[tt++] = {n,a,b,c};
	// 栈不空
	while(tt!=hh) {
		auto nn = h[tt-1].num;
		auto aa = h[tt-1].a, bb = h[tt-1].b, cc = h[tt-1].c;
		tt --;
		
		if(nn == 1) {
			cout << aa << "->" << cc << endl;
		}
		else {
			h[tt++] = {nn-1,bb,aa,cc};
			h[tt++] = {1,aa,bb,cc};
			h[tt++] = {nn-1,aa,cc,bb};
		}
	} 
}

int main() {
	int n;
	cin >> n;
	solve(n,'A','B','C');
	
	return 0;
}

1108 最大公约数

代码(函数__gcd(a,b) )

这里就不想写了,以前写了有笔记。

数论—快速幂,欧几里得及其扩展,逆元,单位元_数论单位元函数-CSDN博客

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

int main() {
	int a, b;
	cin >> a >> b;
	cout << __gcd(a,b) << endl;
	return 0;
}

1109 字符串

代码(搭建递归工作栈和递归结构)

怎么递归写呢?(递归的非递归写法)

跟汉诺塔那样一样写,别忘了条件判断才入栈,逆序入栈.

其实就是三个递归入口,a,b, c.  从a进又不断 a b c  不断深搜路径数

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

// 字符串递归结构 
struct _str {
	int a;
	int b;
	int c;
	int n;
};

_str str[100000];
int tt;

int solve(int a, int b, int c, int n) {
	if(a+b+c<n) return 0;
	int count = 0;
	str[tt++] = {a,b,c,n}; //入栈 
	// 栈不空 
	while(tt) {
		// 出栈 
		auto A = str[tt-1].a;
		auto B = str[tt-1].b;
		auto C = str[tt-1].c;
		auto num = str[tt-1].n;
		tt --;
		
		if(num == 0) count ++;
		else {
			if(C) str[tt++] = {A,B,C-1,num-1};
			if(B) str[tt++] = {A,B-1,C,num-1};
			if(A) str[tt++] = {A-1,B,C,num-1};
		} 
	}
	return count;
}

int main() {
	int a, b, c, n;
	cin >> a >> b >> c >> n;
	
	int ans = solve(a,b,c,n);
	cout << ans << endl;
	
	return 0;
}

代码2(递归)

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

int res = 0;

void solve(int a,int b,int c,int n) {
	if(n == 0) res ++;
	if(a>0) solve(a-1,b,c,n-1);
	if(b>0) solve(a,b-1,c,n-1);
	if(c>0) solve(a,b,c-1,n-1);
}

int main() {
	int a, b, c, n;
	cin >> a >> b >> c >> n;
	solve(a,b,c,n);
	cout << res << endl;
	return 0;
}

1110 走台阶

数据保证<=40

代码(递归)

#include<bits/stdc++.h>
using namespace std;
// 需要预定义,因为奇偶相互交替
int odd(int n);
int even(int n); 

// 奇偶替换
// 偶数解个数 
int even(int n) {
	if(n==1) return 0;
	if(n==2) return 1;
	// 走一步到奇数;
	return odd(n-1) + odd(n-2); 
} 
//奇数解个数 
int odd(int n) {
	if(n==1 || n==2) return 1;
	// 走一步到偶数
	return even(n-1) + even(n-2); 
}

int main() {
	int n;
	cin >> n;
	cout << even(n) << endl;
	return 0;
}

代码(非递归)

偶会走到奇数步,奇偶交替

#include<bits/stdc++.h>
using namespace std;
//递归阶梯结构
struct step {
	int n;
	int even;
	int odd;
};

const int N = 1e5+10;
step a[N]; int tt;
int res = 0;

void solve(int n,int os,int js) {
	a[tt++] = {n,os,js};
	
	while(tt) {
		auto num = a[tt-1].n;
		auto _os = a[tt-1].even;
		auto _js = a[tt-1].odd;
		tt --;
		
		if(_os==1&&num==2) res++;
		if(_js==1&&(num==1||num==2)) res ++;
		else if(num>2) {
			a[tt++] = {num-2,-_os,-_js};
			a[tt++] = {num-1,-_os,-_js};
		}
	}
}

int main() {
	int n;
	cin >> n;
	solve(n,1,-1);
	cout << res << endl;
	return 0;
}

1111 扑克牌

代码(dfs递归)

每张牌选几张,有五种选法。 

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

int res = 0;

void dfs(int n, int k) {
	if(n < 0) return ;
	if(n == 0) {
		res ++; return ;
	}
	for(int i = 0; i <= 4; i ++) {
		if(k<13) 
			dfs(n-i,k+1);
	}
}

int main() {
	dfs(13,0);
	cout << res << endl;
	return 0;
}

代码2(非递归)

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

int res = 0;
// 选牌组合递归结构 
struct pk {
	int n; //剩余要选牌数 
	int k; // 当前牌号 0-12 
};

const int N = 1e5+10;
pk p[N]; int tt;

void solve(int n, int k) {
	p[tt++] = {n,k};
	while(tt) {
		auto num = p[tt-1].n;
		auto kk = p[tt-1].k;
		tt --;
		if(num<0) continue;
		if(num==0) {
			res ++; continue;
		}
		for(int i = 0; i <= 4&&kk<13; i ++) { // kk<13 牌号 
			p[tt++] = {num-i,kk+1};
		}
	}
}

int main() {
	solve(13,0);
	cout << res << endl;
	return 0;
}

1112 第M个排序

代码1(stl)

排序后第m个,所以next_permutation() ,  m次

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

vector<int> a;

int main() {
	int n, m;
	cin >> n >> m;
	for(int i = 0; i < n; i ++) {
		int x; cin >> x;
		a.push_back(x);
	}
	for(int i = 0; i < m; i ++) {
		next_permutation(a.begin(),a.end());
	}
	for(auto x:a) cout << x <<" ";
	return 0;
}

代码2(dfs递归)

path路径存储数组,作为全局变量,dfs深搜每条路径的搜索,会将前面路径覆盖。

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

int n, m;
int res;
const int N = 1e5+10;
int path[N];
int a[N];
bool vis[N];

void dfs(int u) {
	if(u == n) {
		res ++;
		if(res == m+1) {
			for(int i = 0; i < n; i ++) cout << path[i] << " ";
		}
		return ;
	}
	for(int i = 0; i < n; i ++) {
		if(!vis[i]) {
			path[u] = a[i];
			vis[i] = true;
			dfs(u + 1);
			vis[i] = false;
		}
	}
}

int main() {
	memset(vis,false,sizeof vis);
	cin >> n >> m;
	for(int i = 0; i < n; i ++) cin >> a[i];
	dfs(0);
	return 0;
}

代码3(非递归,递归工作栈搭建)

没想好

1113 按字典序输出所有排列

 代码 (dfs)

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

int n, m;
const int N = 1e5+10;
int a[N];
int path[N];
bool vis[N];

void dfs(int u) {
	if(u == m) {
		cout << path[0] ;
		if(m>1) {
			for(int i = 1; i < m; i ++) cout << "," << path[i];
		}
		cout << endl;
	}
	for(int i = 0; i < n; i ++) {
		if(!vis[i]) {
			path[u] = a[i];
			vis[i] = true;
			dfs(u+1);
			vis[i] = false;
		}
	}
}

int main() {
	cin >> n >> m;
	for(int i = 0; i < n; i ++) cin >> a[i];
	dfs(0);
	return 0;
}

代码2(next_permutation() )

正常实现,取前两个

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

int n,m;
const int N = 1e5+10;
int a[N];

int fact(int x) {
	int res = 1;
	for(int i = x; i >= 1; i --) res *= i;
	return res;
}

int main() {
	cin >> n >> m;
	for(int i = 0; i < n; i ++) cin >> a[i];
	int num = fact(n-m);
	int flag = 1;
	do {
		if(flag == 1) {
			cout << a[0];
			for(int i = 1; i < m; i ++) cout << "," << a[i];
			cout << endl;
		}
		if(flag == num) flag = 0;
		flag ++;
	} while(next_permutation(a,a+n));
	
	return 0;
}

代码2分析 (去重过程)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/919938.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

07架构面试题

目录 一、关于合生元的面试题的架构分析的问题 1. 陈述两种方案的优劣 2. 在那些条件下&#xff0c;会选择哪一个方案 3. 你倾向那一种&#xff1f; 4. 如果要实施方案二的&#xff0c;准备步骤和流程 一、关于合生元的面试题的架构分析的问题 1. 陈述两种方案的优劣 方案…

递归:编程世界的奇妙魔法之旅

模块一&#xff1a;递归的神秘面纱 —— 初窥魔法之门 1. 递归的概念&#xff1a;神秘的魔法回响 &#x1f60e;嘿&#xff01;各位编程大侠们&#xff0c;今天咱们要来聊聊一个超级神奇的玩意儿 —— 递归。这递归啊&#xff0c;简直就是编程世界里神秘得不能再神秘的魔法回…

力扣题目总结

1.游戏玩法分析IV AC: select IFNULL(round(count(distinct(Result.player_id)) / count(distinct(Activity.player_id)), 2), 0) as fraction from (select Activity.player_id as player_idfrom (select player_id, DATE_ADD(MIN(event_date), INTERVAL 1 DAY) as second_da…

Ubuntu22.04LTS 部署前后端分离项目

一、安装mysql8.0 1. 安装mysql8.0 # 更新安装包管理工具 sudo apt-get update # 安装 mysql数据库&#xff0c;过程中的选项选择 y sudo apt-get install mysql-server # 启动mysql命令如下 &#xff08;停止mysql的命令为&#xff1a;sudo service mysql stop&#xff0…

(Linux)搭建静态网站——基于http/https协议的静态网站

简单了解nginx配置文件 1.下载并开启nginx服务 下载 [rootlocalhost ~]# dnf install nginx -y开启 [rootlocalhost ~]# systemctl restart nginx 1.(1)搭建静态网站——基于http协议的静态网站 实验1&#xff1a;搭建一个web服务器&#xff0c;访问该服务器时显示“hello w…

vue3:scss引用

原文查看&#xff1a;https://mp.weixin.qq.com/s?__bizMzg3NTAzMzAxNA&mid2247484356&idx2&sn44b127cd394e217b9e3c4eccafdc0aa9&chksmcec6fb1df9b1720b7bd0ca0b321bf8a995fc8cba233deb703512560cbe451cfb1f05cdf129f6&token1776233257&langzh_CN#rd…

Oracle - 多区间按权重取值逻辑 ,分时区-多层级-取配置方案(二)

Oracle - 多区间按权重取值逻辑 &#xff0c;分时区-多层级-取配置方案https://blog.csdn.net/shijianduan1/article/details/133386281 某业务配置表&#xff0c;按配置的时间区间及组织层级取方案&#xff0c;形成报表展示出所有部门方案的取值&#xff1b; 例如&#xff0…

13.C++内存管理2(C++ new和delete的使用和原理详解,内存泄漏问题)

⭐本篇重点&#xff1a;new, delete的使用和原理 ⭐本篇代码&#xff1a;c学习/04.c-动态内存管理 橘子真甜/c-learning-of-yzc - 码云 - 开源中国 (gitee.com) 目录 一. new和delete的使用 1.1 操作内置类型 1.2 操作自定义类型 二. new, delete与malloc, free的区别 2.1…

用源码编译虚幻引擎,并打包到安卓平台

用源码编译虚幻引擎&#xff0c;并打包到安卓平台 前往我的博客,获取更优的阅读体验 作业内容: 源码编译UE5.4构建C项目&#xff0c;简单设置打包到安卓平台 编译虚幻 5 前置内容 这里需要将 Epic 账号和 Github 账号绑定&#xff0c;然后加入 Epic 邀请的组织&#xff0c…

golang通用后台管理系统09(系统操作日志记录)

1.日志工具类 package log/**** 日志记录 wangwei 2024-11-18 15:30*/ import ("log""os""path/filepath""time" )// 获取以当前日期命名的日志文件路径 func getLogFilePath() string {currentDate : time.Now().Format("2006-…

基于yolov8、yolov5的电塔缺陷检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要&#xff1a;电塔缺陷检测在电力设备巡检、运行维护和故障预防中起着至关重要的作用&#xff0c;不仅能帮助相关部门实时监测电塔运行状态&#xff0c;还为智能化检测系统提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的电塔缺陷检测模型&#xf…

论文阅读 SeedEdit: Align Image Re-Generation to Image Editing

目录 摘要 1 INTRODUCTION 2 SEEDEDIT 2.1 T2I MODEL FOR EDITING DATA GENERATION 2.2 CAUSAL DIFFUSION MODEL WITH IMAGE INPUT 2.3 ITERATIVE ALIGNMENT 3 EXPERIMENTS 3.1 BENCHMARK AND METRICS 3.2 IMAGE EDITING COMPARISON 4 CONCLUSION 摘要 SeedEdit&…

昇思MindSpore第四课---GPT实现情感分类

1. GPT的概念 GPT 系列是 OpenAI 的一系列预训练模型&#xff0c;GPT 的全称是 Generative Pre-Trained Transformer&#xff0c;顾名思义&#xff0c;GPT 的目标是通过Transformer&#xff0c;使用预训练技术得到通用的语言模型。和BERT类似&#xff0c;GPT-1同样采取pre-trai…

Nacos实现IP动态黑白名单过滤

一些恶意用户&#xff08;可能是黑客、爬虫、DDoS 攻击者&#xff09;可能频繁请求服务器资源&#xff0c;导致资源占用过高。因此我们需要一定的手段实时阻止可疑或恶意的用户&#xff0c;减少攻击风险。 本次练习使用到的是Nacos配合布隆过滤器实现动态IP黑白名单过滤 文章…

STM32芯片EXIT外部中断的配置与原理以及模板代码(标准库)

配置EXIT外部中断其实就是把GPIO刀NVIC的各个外设配置好 第一步&#xff1a;配置RCC&#xff0c;把我们涉及到的外设的时钟都打开 &#xff08;此处EXTI是默认打开的&#xff0c;而NVIC是内核外设无需配置&#xff09; 第二步&#xff1a;配置GPIO,选择端口为输入模式 第三…

大数据实验4-HBase

一、实验目的 阐述HBase在Hadoop体系结构中的角色&#xff1b;能够掌握HBase的安装和配置方法熟练使用HBase操作常用的Shell命令&#xff1b; 二、实验要求 学习HBase的安装步骤&#xff0c;并掌握HBase的基本操作命令的使用&#xff1b; 三、实验平台 操作系统&#xff1…

商用密码产品认证名录说明

《商用密码产品认证目录》是为贯彻落实《中华人民共和国密码法》&#xff0c;进一步健全完善商用密码产品认证体系&#xff0c;更好满足商用密码产业发展需要&#xff0c;根据《国家密码管理局 市场监管总局关于调整商用密码产品管理方式的公告》《市场监管总局 国家密码管理局…

uniapp微信小程序接入airkiss插件进行WIFI配网

本文可参考uniapp小程序插件 一.申请插件 微信公众平台设置页链接&#xff1a;微信公众平台 登录您的小程序微信公众平台&#xff0c;进入设置页&#xff0c;在第三方设置->插件管理->添加插件中申请AiThinkerAirkissforWXMini插件&#xff0c;申请的插件appId为【wx6…

突破自动驾驶瓶颈!KoMA:多智能体与大模型的完美融合

0.简介 本推文主要介绍了由来自北京航空航天大学的姜克谋、蔡轩和崔智勇教授等共同提出的一种名为KoMA的知识驱动的多智能体框架。论文《KoMA: Knowledge-driven Multi-agent Framework for Autonomous Driving with Large Language Models》提出了KoMA框架&#xff0c;通过结…

企业项目级IDEA编辑器设置类注释、方法注释模板(仅增加@author和@date)

文章目录 前言一 设置类注释1.1 添加模板1.2 复制配置 二 设置方法注释2.1 添加模版2.2 设置模版2.3 设置参数变量2.4 配置对应快捷键2.5 配置对应作用域2.6 使用方式 说明 前言 公司代码规范中&#xff0c;需要在标准JavaDoc注释的基础上加上作者和日期。网上虽然有很多现成的…