三、贪心算法

news/2024/4/27 15:55:47

三、贪心算法

文章目录

  • 三、贪心算法
    • 1、找零钱
    • 2、求一个数列的极差
    • 3、将真分数用埃及分数之和表示
    • 4、找到出现最多次数的数
    • 5、将给定的整数去掉任意个数字后重新组成最小整数

1、找零钱

#include <stdio.h>
int a[7]={100,50,20,10,5,2,1},ns[7];
void main()
{/**********  Begin  **********/int n;scanf("%d",&n);while(n){for(int i=0;i<7;i++){if(n>=a[i]){n=n-a[i];ns[i]++;break;}}}for(int i=0;i<7;i++){printf("%d元 %d张\n",a[i],ns[i]);//cout<<a[i]<<"元 "<<ns[i]<<"张\n";}/**********  End  **********/
}

2、求一个数列的极差

#include <stdio.h>void sort(int *a, int n, int asc) {for (int i = 0; i < n - 1; i++) {for (int j = 0; j < n - 1 - i; j++) {if (asc && a[j] > a[j + 1]) {a[j]=a[j+1]^a[j];a[j+1]=a[j]^a[j+1];a[j]=a[j+1]^a[j];} else if (!asc && a[j] < a[j + 1]) {a[j]=a[j+1]^a[j];a[j+1]=a[j]^a[j+1];a[j]=a[j+1]^a[j];}}}
}
int main() {int i, n, max, min, num;scanf("%d", &num);n = num;int a[num], b[num];for (i = 0; i < num; i++) {scanf("%d", &a[i]);b[i] = a[i];}sort(a, n, 1);while (n > 1) {int m1, m2, nm;m1 = a[0];m2 = a[1];nm = m1 * m2 + 1;a[0] = nm;for (int i = 1; i < n - 1; i++)a[i] = a[i + 1];n--;sort(a, n, 1);max = a[n - 1];}sort(b, num, 0);while (num > 1) {int m1, m2, nm;m1 = b[0];m2 = b[1];nm = m1 * m2 + 1;b[0] = nm;for (int i = 1; i < num - 1; i++)b[i] = b[i + 1];num--;sort(b, num, 0);min = b[num - 1];}printf("Max=max-min=%d-%d=%d\n", max, min, max - min);return 0;
}

3、将真分数用埃及分数之和表示

#include <stdio.h>
int gcd(int a,int b){if(b==0)return a;return gcd(b,a%b);//辗转相除法 
}
/*设:a>b 1.if a%b==0,b是最大公约数2.a%b!=0,那么a%b的余数的最大公约数就是a和b的反复将较大的除以较小的,然后用余数替换较大的数,直到较小的数=0 
*/ 
int main() {int a, b;scanf("%d %d", &a, &b);printf("%d/%d=", a, b);while (a != 1) {int nb = (b / a) + 1;printf("1/%d+", nb);// 2a = a * nb - b;//3*2 - 5 = 1b = b * nb;// 5*2=10int c = gcd(a, b);a /= c;b /= c;}printf("1/%d\n", b);return 0;
}

4、找到出现最多次数的数

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int a[N],b[N];
int main(){int n;cin>>n;int z=0;for(int i=0;i<n;i++){int num;cin>>num;if(num>=0){a[num]++;z++;}else{b[-num]++;}}int m1=0;for(int i=0;i<N-1;i++){if(m1<a[i])m1=i;if(b[0]<b[i+1])b[0]=i+1;}cout<<"出现次数最多的且最小的数为";if(a[m1]>b[b[0]])cout<<m1;else cout<<-b[0];return 0;
}

5、将给定的整数去掉任意个数字后重新组成最小整数

#include <bits/stdc++.h>
using namespace std;
int main() {/*********  Begin  ********/int n;string s;cin >> s >> n;if (n > s.size()) {return 0;}while (n) {/*2311831:2 3 3>1   del 3 -> 211832:2 2>1     del 2 -> 11833:1 1 8 8>3 del 8 -> 113n=0,break;*/int i;for(i=0;i<s.size()-1&&s[i]<=s[i+1];i++);s.erase(i, 1);n--;}if (s.empty()) {cout << 0 ;}int i;for(i=0;i<s.size();i++){if(s[i]!='0')break;}for(int j=i;j<s.size();j++)cout<<s[j];return 0;/*********  End  ********/
}

GO!

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

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

相关文章

POJO简介

文章目录 简介POJO与ELB的区别POJO真正的意思 常见的POJO类DTODAOPOVOEntity 简介 什么是POJO&#xff1f;POJO&#xff08;Plain Ordinary Java Object&#xff09;简单的Java对象&#xff0c;实际就是普通JavaBeans&#xff0c;是为了避免和EJB(EJB是Enterprise Java Beans技…

【SpringSecurity】十五、完成系统支持Github三方登录

文章目录 1、需求2、在对接系统中完成客户端注册3、创建客户端应用4、CommonOAuth2Provider SpringSecurity OAuth2.0文档&#xff1a; https://docs.spring.io/spring-security/reference/servlet/oauth2/index.html 1、需求 对接Github&#xff0c;在自己系统实现支持Githu…

美摄科技剪同款SDK解决方案全面升级

视频内容已成为企业宣传、品牌塑造和市场营销的重要载体。然而&#xff0c;如何快速、高效地制作出高质量的视频内容&#xff0c;成为摆在众多企业面前的一大难题。针对这一挑战&#xff0c;美摄科技凭借深厚的技术积累和创新能力&#xff0c;推出了全新的剪同款SDK解决方案&am…

python宿舍管理系统flask-django-php-nodejs

随着信息时代的来临&#xff0c;过去的传统管理方式缺点逐渐暴露&#xff0c;对过去的传统管理方式的缺点进行分析&#xff0c;采取计算机方式构建宿舍管理系统。系统分为多个功能模块&#xff1a;学生、宿舍管理、楼宇信息、宿舍信息、宿舍安排、缺勤信息等。通过系统测试&…

迷宫(蓝桥杯)——DFS和BFS

迷宫 题目描述 下图给出了一个迷宫的平面图&#xff0c;其中标记为 1 的为障碍&#xff0c;标记为 0 的为可以通行的地方。 010000 000100 001001 110000迷宫的入口为左上角&#xff0c;出口为右下角&#xff0c;在迷宫中&#xff0c;只能从一个位置走到这 个它的上、下、左…

Prompt提示工程上手指南:基础原理及实践(三)-Prompt个性知识库引导

前言 Prompt系列的第二期文章已经将所有的Prompt工程主流策略讲解完毕&#xff0c;共涉及到六种Prompt类别模型以及具体生产内容详解。再结合系列第一篇文章具体对Prompt工程的详细介绍&#xff0c;也就可以达到Prompt工程师的初步入门&#xff0c;现在如果掌握了这些基础技能…