当前位置: 首页 > news >正文

贪心算法集

去重数组

#include <stdio.h> int main() { int n; scanf("%d", &n); int a[55]; for (int i = 0; i < n; i++) { scanf("%d", &a[i]); } int seen[1005] = {0}; // 标记是否已经选择保留(从右往左第一次遇到) int keep[55], k = 0; // 保留的元素(实际我们只需要和) // 从右往左扫描 for (int i = n - 1; i >= 0; i--) { if (!seen[a[i]]) { seen[a[i]] = 1; keep[k++] = a[i]; } } // 保留的元素是 keep 里的,但注意我们是从右往左加入的,顺序不重要,我们要求和 int sum = 0; for (int i = 0; i < k; i++) { sum += keep[i]; } int remove_count = n - k; printf("%d\n", remove_count); printf("%d\n", sum); return 0; }

谈判

#include <stdio.h> #include <stdlib.h> int cmp(const void *a, const void *b) { return *(int*)a - *(int*)b; } int main() { int n; scanf("%d", &n); int t[n]; for (int i = 0; i < n; i++) { scanf("%d", &t[i]); } long long cost = 0; int size = n; while (size > 1) { // 排序找到最小的两个 qsort(t, size, sizeof(int), cmp); // 合并最小的两个 int sum = t[0] + t[1]; cost += sum; // 用 sum 替换 t[0],移除 t[1] t[0] = sum; for (int i = 1; i < size - 1; i++) { t[i] = t[i + 1]; } size--; } printf("%lld\n", cost); return 0; }

最小步数

#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int n; scanf("%d",&n); int x; x=n%3; if(x==0) printf("%d\n",n/3); else printf("%d\n",n/3+1); return 0; }

最小化战斗力差距

#include <stdio.h> #include <stdlib.h> int cmp(const void *a, const void *b) { return *(long long*)a - *(long long*)b; } int main() { int n; scanf("%d", &n); long long w[n]; for (int i = 0; i < n; i++) { scanf("%lld", &w[i]); } // 排序 qsort(w, n, sizeof(long long), cmp); long long min_gap = 1LL << 60; // 很大的数 for (int i = 0; i < n - 1; i++) { long long diff = llabs(w[i] - w[i+1]); if (diff < min_gap) { min_gap = diff; } } printf("%lld\n", min_gap); return 0; }

平衡魔方

#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); int count=0; for(int i=0;i<n;i++) { int a; scanf("%d",&a); if(a%2==0) count++; } if(count==n) printf("0\n"); else printf("%d\n",count); } return 0; }

字符串的切分

#include <stdio.h> #include <string.h> int main() { int n; scanf("%d", &n); char t[100005]; scanf("%s", t); int count[26] = {0}; for (int i = 0; i < n; i++) { count[t[i] - 'a']++; } int ans = 0; for (int i = 0; i < 26; i++) { if (count[i] > ans) { ans = count[i]; } } printf("%d\n", ans); return 0; }

最多表示数

#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { long long n; scanf("%lld",&n); printf("%lld",n*(n+1)/2); return 0; }

宝石塔的亮度差异

#include <stdio.h> #include <stdlib.h> int cmp(const void* a,const void* b) { return *(int*)a-*(int*)b; } int main(int argc, char *argv[]) { int n; scanf("%d",&n); int a[2*n]; for(int i=0;i<n;i++) { scanf("%d",&a[i]); } for(int i=n;i<2*n;i++) { scanf("%d",&a[i]); } qsort(a,2*n,sizeof(int),cmp); int ans=a[n-1]-a[0]; for(int i=1;i<=n;i++) { int diff=a[i+n-1]-a[i]; if(diff<ans) ans=diff; } printf("%d\n",ans); return 0; }

纪念品分组

#include <stdio.h> #include <stdlib.h> int cmp(const void *a, const void *b) { return *(int*)a - *(int*)b; } int main() { int w, n; scanf("%d %d", &w, &n); int *prices = (int*)malloc(n * sizeof(int)); for (int i = 0; i < n; i++) { scanf("%d", &prices[i]); } // 排序 qsort(prices, n, sizeof(int), cmp); int left = 0, right = n - 1; int groups = 0; while (left <= right) { if (left == right) { groups++; break; } if (prices[left] + prices[right] <= w) { groups++; left++; right--; } else { groups++; right--; } } printf("%d\n", groups); free(prices); return 0; }

翻硬币

#include <stdio.h> #include <string.h> int main() { char S[1005], T[1005]; scanf("%s %s", S, T); int n = strlen(S); int diff[1005]; for (int i = 0; i < n; i++) { diff[i] = (S[i] != T[i]); } int ans = 0; for (int i = 0; i < n; i++) { if (diff[i] == 1) { ans++; diff[i] = 0; diff[i+1] = 1 - diff[i+1]; // 翻转下一个 } } printf("%d\n", ans); return 0; }

找零硬币数

#include <stdio.h> int main() { int M; scanf("%d", &M); int coins[] = {10000, 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1}; int n = sizeof(coins) / sizeof(coins[0]); int count = 0; for (int i = 0; i < n; i++) { if (M >= coins[i]) { count += M / coins[i]; M %= coins[i]; } } printf("%d\n", count); return 0; }

一键3连

#include <stdio.h> int main() { int n; scanf("%d", &n); int A[100005]; int exist[100005] = {0}; int max_val = 0, min_val = 100005; for (int i = 0; i < n; i++) { scanf("%d", &A[i]); exist[A[i]] = 1; if (A[i] > max_val) max_val = A[i]; if (A[i] < min_val) min_val = A[i]; } int res = 0; // 只检查到 max_val - 2 即可 for (int a = min_val; a <= max_val - 2; a++) { if (exist[a] && exist[a+1] && exist[a+2]) { res++; } } printf("%d\n", res); return 0; }
http://www.jsqmd.com/news/496830/

相关文章:

  • MarioVerse:基于 Flutter × HarmonyOS 6.0 的超级玛丽游戏画布区域实现详解
  • Qwen2.5-VL-7B-Instruct图文交互教程:多模态思维链(MoT)提示工程
  • 算法基础·C++常用操作
  • 华为AI产品和技术由浅入深巅峰解析
  • SiameseUIE企业级落地案例:政务公文关键信息(人物/机构/事件)批量抽取
  • 常州代理记账哪家好?从一套“糊涂账”说起的实战拆解 - 企师傅推荐官
  • windows装系统教程
  • MarioVerse:基于 Flutter × HarmonyOS 6.0 的超级玛丽跨端游戏控制系统深度解析—从 UI 设计到跨端适配的「游戏控制区域」实战拆解
  • 2026年3月江苏铝合金工具箱/冷冻盒/走台板/托盘/高空作业平台/塔筒平台盖板生产厂家竞争格局深度分析报告 - 2026年企业推荐榜
  • 目前去渍最好的选哪款?2026真实测评美白去垢牙膏品牌推荐:洁净牙齿 - 资讯焦点
  • php python+vue请假考勤功能需求分析
  • AOP切面(是一种思想)
  • 如何在VirtualBox中安装银河麒麟桌面操作系统V10
  • UGUI不规则形状按钮(基于图标不透明区域)
  • Docker上部署前后端分离项目
  • 2026北京婚纱摄影机构对比:如何选到靠谱好店 - 博客万
  • 外贸企业为什么“有产品却没有客户”?问题可能出在获客方式 - 资讯焦点
  • C# WinForms机房管理系统源码|支持SQL Server/MySQL/Access多数据库|.NET Framework窗体应用
  • 机试搜索----dfs
  • OpenClaw企业级AI安全防护实战:七层策略+沙箱隔离+细粒度权限,彻底根治AI越权乱操作
  • C语言:字符函数和字符串函数—及模拟实现
  • 广柔扁平电缆在机器人AI技术创新应用中的前景探索 - 资讯焦点
  • PyQt:从图像文件或字节流生成QImage的速度测试
  • JMeter实战2--阶梯线程组及计算逻辑
  • 链接脚本优化(lsl或ld),Map文件解析,内存分析软件MapSee免费下载
  • ROS2的核心概念A-节点
  • Windows如何阻止应用程序联网
  • 灵芝孢子粉哪个牌子好?从破壁率、成分、口碑分析.
  • 计算机毕业设计源码:Python基于大数据的租房价格分析平台 Django框架 Requests爬虫 可视化 房子 房源 大数据 大模型(建议收藏)✅
  • VMware安装教程带资料完整版