函数与结构体(入门6)

【深基7.例1】距离函数 

#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
int main()
{
	double x1, x2, x3, y1, y2, y3;
	cin >> x1 >> y1 >> x2 >> y2 >> x3 >> y3;

	double d1 = pow(pow(x2 - x1, 2) + pow(y2 - y1, 2), 0.5);
	double d2 = pow(pow(x3 - x1, 2) + pow(y3 - y1, 2), 0.5);
	double d3 = pow(pow(x3 - x2, 2) + pow(y3 - y2, 2), 0.5);

	cout <<fixed<< setprecision(2) << d1 + d2 + d3 << endl;

	return 0;
}

注意:

头文件cmath(pow的头文件)以及输出两位小数的方式

【深基7.例2】质数筛 

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

bool fun(int x)
{
	if (x == 0 || x == 1)return false;
	if (x == 2)return true;
	if (x % 2 == 0)return false;
	else {
		for (int i = 3; i <= sqrt(x); i++) {
			if (x % i == 0)return false;
		}
	}
	return true;
}

int main()
{
	int n;
	cin >> n;
	vector<int>vec(n);
	for (int i = 0; i < n; i++) {
		cin >> vec[i];
	}
	bool flag= true;
	for (int i = 0; i < n; i++) {
		if (fun(vec[i])) {
			cout << vec[i] << ' ';
		}
	}


	return 0;
}

注意:

在判断是否为素数的函数中,for循环内应该是i<=sqrt(x)

【深基7.例3】闰年展示 

#include <iostream>
#include <vector>
#include <cmath>
using namespace std;

bool solve(int x)
{
	if (x % 100 == 0) {
		if (x % 400 == 0)return true;
		else return false;
	}
	else {
		if (x % 4 == 0)return true;
		else return false;
	}
}

int main()
{
	int m, n;
	cin >> m >> n;
	vector<int>vec;
	int count = 0;
	for (int i = m; i <= n; i++) {
		if (solve(i)) {
			count++;
			vec.push_back(i);
		}
	}
	cout << count << endl;
	for (int i = 0; i < vec.size(); i++) {
		cout << vec[i] << " ";
	}

	return 0;
}

【深基7.例4】歌唱比赛 

#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;


int main()
{
	int m, n;
	cin >> n >> m;
	vector<int>vec;
	for (int i = 0; i < n; i++) {
		int maxn = -1;
		int minn = 11;
		int x;
		int sum = 0;
		for (int j = 0; j < m; j++) {
			cin >> x;
			if (maxn < x)maxn = x;
			if (minn > x)minn = x;
			sum += x;
		}
		sum = sum - minn - maxn;
		vec.push_back(sum);
	}
	int maxn = -1;
	for (int i = 0; i < vec.size(); i++) {
		if (vec[i] > maxn)maxn = vec[i];
	}
	cout << fixed << setprecision(2) << 1.0 * maxn / (m - 2) << endl;

	return 0;
}

【深基7.例7】计算阶乘 

#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;

long long  sum = 1;
int n;
void solve(int x)
{
	sum *= x;
	if (x == n)return;
	solve(++x);
}

int main()
{
	cin >> n;
	solve(1);
	cout << sum << endl;


	return 0;
}

注意:

在递归的时候,sum*=x应该写在判断x是否等于n之前,感觉是我递归不熟练,导致了错误

赦免战俘 

#include <iostream>
#include <cstring>
using namespace std;

bool a[2000][2000];

void dfs(int x, int y, int n)
{
	if (n) {
		for (int i = x; i < n / 2 + x; i++) {
			for (int j = y; j < n / 2 + y; j++) {
				a[i][j] = 0;
			}
		}
		dfs(n / 2 + x, y, n / 2);//右上角
		dfs(x, n / 2 + y, n / 2);//左下角
		dfs(n / 2 + x, n / 2 + y, n / 2);//右下角
	}
}

int main()
{
	int n;
	cin >> n;
	n = 1 << n;
	memset(a, true, sizeof(a));
	dfs(0, 0, n);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cout << a[i][j] << " ";
		}
		cout << endl;
	}

	return 0;
}

注意:

这里我借鉴的别人代码,由于本人对指针实在是不太了解,所以没有用大佬方法的指针,不过发现不用指针也可以做;

主要是模拟,然后递归遍历右上角,左下角,右下角;此外,数组a设置成了int类型的话,然后memset(a,1,sizeof(a)),不知道为什么在输出的时候出现了乱码,我现在还无法解释;后面把它设置成了bool类型,memset(a,true,sizeof(a))就没问题。

【深基7.例9】最厉害的学生 

#include <iostream>
#include <cstring>
#include <string>
using namespace std;

struct score
{
	string name;
	int c;
	int m;
	int e;
	int sum;
}a[1005];

int main()
{
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> a[i].name >> a[i].c >> a[i].m >> a[i].e;
		a[i].sum = a[i].c + a[i].m + a[i].e;
	}
	int maxn = 0;
	int index = 0;
	for (int i = 0; i < n; i++) {
		if (a[i].sum > maxn) {
			maxn = a[i].sum;
			index = i;
		}
	}
	cout << a[index].name << " " << a[index].c << " " << a[index].m << " " << a[index].e << endl;

	return 0;
}

【深基7.例10】旗鼓相当的对手 - 加强版 

#include <iostream>
#include <cstring>
#include <string>
using namespace std;

struct score
{
	string name;
	int c;
	int m;
	int e;
	int sum;
}a[1005];

int main()
{
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> a[i].name >> a[i].c >> a[i].m >> a[i].e;
		a[i].sum = a[i].c + a[i].m + a[i].e;
	}
	for (int i = 0; i < n; i++) {
		for (int j = i + 1; j < n; j++) {
			if (abs(a[i].sum - a[j].sum) <= 10
				&& abs(a[i].m - a[j].m) <= 5
				&& abs(a[i].c - a[j].c) <= 5
				&& abs(a[i].e - a[j].e) <= 5) {
				cout << a[i].name << " " << a[j].name << endl;
			}
		}
	}

	return 0;
}

【深基7.例11】评等级 

#include <iostream>
#include <cstring>
#include <string>
using namespace std;

struct score
{
	int num;
	int score;
	int expand;
	int sum;

	void solve() {
		if (this->expand + this->score > 140 && this->sum >= 800) {
			cout << "Excellent" << endl;
		}
		else {
			cout << "Not excellent" << endl;
		}
	}
}a[1005];

int main()
{
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> a[i].num >> a[i].score >> a[i].expand ;
		a[i].sum = 7*a[i].score + 3*a[i].expand ;
	}
	for (int i = 0; i < n; i++) {
		a[i].solve();
	}

	return 0;
}

[NOIP2012 普及组] 质因数分解 

#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
using namespace std;

bool isPrime(int x)
{
	if (x < 2)return false;
	if (x == 2)return true;
	for (int i = 2; i <= sqrt(x); i++) {
		if (x % i == 0)return false;
	}
	return true;
}

int main()
{
	int n;
	cin >> n;
	for (int i = 2; i < n; i++) {
		if (n % i == 0) {
			int temp = n / i;
			if (isPrime(i) && isPrime(temp)) {
				cout << max(i, temp) << endl;
				break;
			}
		}
	}

	return 0;
}

哥德巴赫猜想 

#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
using namespace std;

bool isPrime(int x)
{
	if (x < 2)return false;
	if (x == 2)return true;
	for (int i = 2; i <= sqrt(x); i++) {
		if (x % i == 0)return false;
	}
	return true;
}

int main()
{
	int n;
	cin >> n;

	for (int i = 4; i <= n; i+=2) {
		for (int j = 2; j < n; j++) {
			int temp = i - j;
			if (isPrime(j) && isPrime(temp)) {
				cout << i << "=" << j << "+" << temp << endl;
				break;
			}
		}
	}


	return 0;
}

[USACO1.5] 回文质数 Prime Palindromes 

如果用字符串来判断是否为回文数字,会超时:

bool isPalindrome(string x)
{
	for (int i = 0, j = x.length() - 1; i < j; i++, j--) {
		if (x[i] != x[j])return false;
	}
	return true;
}

解决方法一:把数字反转,而不是用字符串

#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
using namespace std;

bool isPalindrome(int x)
{
	int n = x;
	int reverse = 0;
	while (n > 0) {
		reverse = reverse * 10 + n % 10;
		n /= 10;
	}
	if (reverse == x)return true;
	return false;
}

bool isPrime(int x)
{
	for (int i = 2; i <= sqrt(x); i++) {
		if (x % i == 0)return false;
	}
	return true;
}


int main()
{
	int low, high;
	cin >> low >> high;
	for (int i = low; i <= high; i++) {
		if (isPalindrome(i) && isPrime(i)) {
			cout << i << endl;
		}
	}


	return 0;
}

解决方法二:判断素数的方法换成埃拉托斯特尼筛法

#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>
using namespace std;

bool isPalindrome(string x)
{
	for (int i = 0, j = x.length() - 1; i < j; i++, j--) {
		if (x[i] != x[j])return false;
	}
	return true;
}

// 普通埃拉托斯特尼筛法,找出 2 到 sqrt(b) 范围内的所有质数
void sieve(int limit, vector<int>& primes) {
    vector<bool> isPrime(limit + 1, true);
    isPrime[0] = isPrime[1] = false;  // 0和1不是质数

    for (int i = 2; i <= limit; i++) {
        if (isPrime[i]) {
            primes.push_back(i);
            for (int j = i * i; j <= limit; j += i) {
                isPrime[j] = false;
            }
        }
    }
}

// 分段筛法,找出区间 [low, high] 内的质数
void segmentedSieve(int low, int high) {
    // 计算最大值 high 的平方根
    int limit = sqrt(high) + 1;

    // 获取小于等于 sqrt(high) 的所有质数
    vector<int> primes;
    sieve(limit, primes);

    // 创建一个区间 [low, high] 的布尔数组,初始化为 true(表示是质数)
    vector<bool> isPrime(high - low + 1, true);

    // 对于每一个小于等于 sqrt(high) 的质数,标记出在 [low, high] 范围内的倍数
    for (int p : primes) {
        // 找到 [low, high] 范围内的 p 的第一个倍数
        int start = max(p * p, (low + p - 1) / p * p); // p^2 或者从低范围开始的倍数

        // 标记 [low, high] 范围内的 p 的倍数为非质数
        for (int j = start; j <= high; j += p) {
            isPrime[j - low] = false;
        }
    }

    // 输出 [low, high] 范围内的回文质数
    for (int i = 0; i <= high - low; i++) {
        if (isPrime[i] && (low + i) >= 2 && isPalindrome(to_string(low + i))) {
            cout << low + i << endl;
        }
    }
}

int main()
{
	int low, high;
	cin >> low >> high;

	
    // 使用分段筛法查找 [a, b] 范围内的回文质数
    segmentedSieve(low, high);


	return 0;
}

集合求和 

#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>
using namespace std;

int a[31];

int main()
{
	int i = 0;
	long long sum = 0;
	while (cin >> a[i++]);
	for (int j = 0; j < i; j++) {
		sum += a[j];
	}
	sum *= pow(2, i - 2);
	cout << sum << endl;

	return 0;
}

注意:

这里需要用到一个推导,,推导过程大家可以自己去网上查找

【深基7.习8】猴子吃桃 

#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>
using namespace std;

int main()
{
	int day;
	cin >> day;
	int n = 1;
	for (int i = 1; i < day; i++) {
		n = (n + 1) * 2;
	}
	cout << n << endl;

	return 0;
}

【深基7.习9】培训 

#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>
using namespace std;

struct info
{
	string name;
	int age;
	int score;
}a[10];

int main()
{
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> a[i].name >> a[i].age >> a[i].score;
		if (1.2 * a[i].score <= 600)a[i].score *= 1.2;
		else a[i].score = 600;
	}
	for (int i = 0; i < n; i++) {
		cout << a[i].name << " " << a[i].age + 1 << " " << a[i].score << endl;
	}


	return 0;
}

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

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

相关文章

质数的和与积

质数的和与积 C语言代码C 代码Java代码Python代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 两个质数的和是S&#xff0c;它们的积最大是多少&#xff1f; 输入 一个不大于10000的正整数S&#xff0c;为两个质数的和。 输出 一个整…

OpenCV图像处理实战:从边缘检测到透视变换,掌握七大核心函数

一、引言 图像处理是计算机视觉领域中的基础&#xff0c;而边缘检测和轮廓分析则是其核心任务之一。OpenCV作为一个强大的计算机视觉库&#xff0c;提供了众多功能强大的函数&#xff0c;帮助开发者实现高效的图像处理。在本文中&#xff0c;我们将深入探索OpenCV中的七个重要…

JavaWeb01

JavaWeb 1. BS 和 CS BS B/S结构(Browser/server&#xff0c;浏览器/服务器模式)&#xff0c;是WEB兴起后的一种网络结构模式&#xff0c;WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端&#xff0c;将系统功能实现的核心部分集中到服务器上&#xff0c;简化了系统…

开发者工具的模块化与可扩展性设计

文章目录 前言模块化设计的重要性可扩展性设计的重要性设计模式与技术实现实战代码插件管理器类&#xff1a;PluginManager注册插件方法&#xff1a;register_plugin执行插件方法&#xff1a;execute_plugin 插件实现插件 1&#xff1a;代码格式化插件插件 2&#xff1a;代码行…

嵌入式现状、机遇、挑战与展望

在当今数字化浪潮中&#xff0c;嵌入式系统宛如一颗璀璨的明珠&#xff0c;熠熠生辉&#xff0c;深刻地渗透到了我们生活的方方面面&#xff0c;成为推动现代科技进步不可或缺的关键力量。从智能家居的便捷控制&#xff0c;到工业生产的精准运作&#xff0c;再到汽车的智能驾驶…

️️️ 避坑指南:如何修复国密gmssl 库填充问题并提炼优秀加密实践20241212

&#x1f6e1;️ 避坑指南&#xff1a;如何修复国密gmssl 库填充问题并提炼优秀加密实践 ✨ 引言 在当下的数据安全环境中&#xff0c;SM4作为中国国家密码算法的代表性选择&#xff0c;被广泛应用于金融、通信和政府领域。然而&#xff0c;在实际开发中&#xff0c;即便是开…

markdown入门

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…

四、个人项目系统搭建

文章目录 一、python写的后端代码二、html代码三、index.css四、js代码 效果图&#xff1a; 一、python写的后端代码 后端代码使用Flask编写&#xff0c;如下所示&#xff1a; # app.py from flask import Flask, render_template, request, jsonify, g import sqlite3 import…

【含开题报告+文档+PPT+源码】基于微信小程序的点餐系统的设计与实现

开题报告 随着互联网技术的日益成熟和消费者生活水平与需求层次的显著提升&#xff0c;外卖点餐平台在中国市场上迅速兴起并深深植根于民众日常生活的各个角落。这类平台的核心在于构建了一个基于互联网的强大订餐服务系统&#xff0c;它无缝整合了餐饮商户资源与广大消费者的…

【DFT】【MBIST】Memory Repair

Memory Repaire 1. Overview2. Memory Repair2.1 Column MUX2.2 Type of Repair 3. Tessent Repair Architecture3.1 BIRA3.2 BISR3.3 Implementing Soft Repair3.4 Repair Steps 1. Overview 假设通过 MBIST 发现 SoC 中一个或多个 Memory 存在故障&#xff0c;不能正常进行读…

[搜广推]王树森推荐算法——基于物体的协同过滤

基于物体的协同过滤 ItemCF 基于物体的协同过滤&#xff08;Item-Based Collaborative Filtering&#xff0c;简称ItemCF&#xff09;是一种经典的推荐系统算法 基本思想 量化用户对物品的兴趣&#xff0c;通过分析用户的行为来找到与目标物品相似的其他物品&#xff0c;然后…

scala的隐式转换

定义 隐式转换是 Scala 提供的一种强大的特性&#xff0c;它允许编译器在特定的情况下自动将一种类型转换为另一种类型。这种转换不是显式地通过方法调用进行的&#xff0c;而是由编译器自动插入转换代码。隐式转换主要通过定义隐式转换函数来实现。隐式转换函数是一种带有imp…

跨平台开发技术的探索:从 JavaScript 到 Flutter

随着多平台支持和用户体验一致性在应用程序开发中变得越来越重要,开发者面临的挑战是如何在不同平台上保持代码的可维护性和高效性。本文将探讨如何利用现代技术栈,包括 Flutter、JavaScript、HTML5、WebAssembly、TypeScript 和 Svelte,在统一的平台上进行高效的跨平台开发…

CTFshow-命令执行(Web58-77)

CTFshow-命令执行(Web58-77) Web58 <?php if(isset($_POST[c])){$c $_POST[c];eval($c); }else{highlight_file(__FILE__); }Warning: system() has been disabled for security reasons in /var/www/html/index.php(17) : eval()d code on line 1 本题对于passthru&…

MATLAB 直线插点重采样(98)

MATLAB 直线插点重采样(98) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 在两点构成的直线之间,均匀插入多个点,加密重采样直线点,具体的算法实现如下,结果如图所示: 二、算法实现 1.代码 代码如下(示例): % 示例调用 qian_cloud = [0, 0, 0; 1

Launcher启动流程

Launcher启动流程分2个阶段&#xff1a; AMS systemReady() 会启动一个临时Activity&#xff1a;com.android.settings.FallbackHome&#xff0c;如下流程等到用户解锁成功后&#xff0c;FallbackHome轮询到有可用的RealHome包&#xff0c;会销毁掉自己&#xff0c;AMS发现没有…

介绍几个Linux下的杀毒软件

一&#xff1a;chkrootkit 是一个用于检测Linux系统下可能被攻击者植入的后门程序或恶意代码的扫描工具。 &#xff08;1&#xff09;安装方法&#xff08;ubuntu) sudo apt update sudo apt install chkrootkit &#xff08;2&#xff09;使用方法&#xff1a; chkrootkit -…

Linux修改设置时区的几种方法

1.修改成北京时间 复制相应的时区文件&#xff0c;替换系统时区文件&#xff1b;或者创建链接文件 rm -rf /etc/localtime //先删除/etc/localtime&#xff0c;否则若存在此文件软链接会失败 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime //或者 ln -s /usr/share/zo…

【C语言篇】C 语言总复习(下):点亮编程思维,穿越代码的浩瀚星河

我的个人主页 我的专栏&#xff1a;C语言&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞❤ 收藏❤ 在C语言的世界里&#xff0c;结构体和联合体以及文件操作都是非常重要且实用的知识板块&#xff0c;掌握它们能帮助我们更高效地组织数据以及与外部文…

如何在 ASP.NET Core 3.1 应用程序中使用 Log4Net

介绍 日志记录是应用程序的核心。它对于调试和故障排除以及应用程序的流畅性非常重要。 借助日志记录&#xff0c;我们可以对本地系统进行端到端的可视性&#xff0c;而对于基于云的系统&#xff0c;我们只能提供一小部分可视性。您可以将日志写入磁盘或数据库中的文件&#xf…