当前位置:首页 » 编程语言 » c语言贪心

c语言贪心

发布时间: 2022-09-22 12:30:04

c语言如何写一个判断贪心算法不是最优解

所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。
贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。
为了证明不是最优解,就只能对0-1背包这类的进行枚举了

② c语言贪心算法的问题

内容我没看
但是你最后是不是多了一个endl?
cout<<endl<<"Number of fish expected:"<<' '<<maxn<<endl;

③ C语言算法,用贪心法

贪心算法虽然不是最好的,但毕竟是你要求的。。。
随机取一个人,
循环开始:随机取一个没接水的人,
比较两个人的接水时间大小,让小的先接。
累加总等待时间为接水时间。
循环体结束。
输出平均接水等待时间累加T/人数n

④ C语言关于贪心算法的(很简单)

LZ在开始研究ACM嘛?
#include<stdio.h>

int least_num_cash(int _money)
{
/*直接贪心,能用大张的钞票尽量用大张的*/
int ret=0;
while(_money!=0)
{
if(_money>=100)
{
_money-=100;
}
else if(_money>=50)
{
_money-=50;
}
else if(_money>=20)
{
_money-=20;
}
else if(_money>=10)
{
_money-=10;
}
else if(_money>=5)
{
_money-=5;
}
else if(_money>=2)
{
_money-=2;
}
else if(_money>=1)
{
_money-=1;
}
ret++;
}
return ret;
}

int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
printf("%d\n",least_num_cash(m-n));
}
return 0;
}

⑤ C语言 贪心算法求背包问题

是你的冒泡排序出了问题~

你吧 原来的1-2-3号按照东西的价值重新排列现在的1-2-3对应原来的2-1-3了
所以 你输出的时候是按 1-2-3输出的话 就等于第一个是原来的X2 第二个是X1第三个是X3
而且你的冒泡排序用错了 只比较了 P[0]/K[0]和P[1]/K[1] P[1]/K[1]和P[2]/K[2]
周一我去学校帮你重新改改 我家的机器没有C++
周一晚上我会上传答案~我最近正好也要做算法的作业~
#include <stdio.h>
#include <math.h>
#define N 50

float find(float p[N],float w[N],float x[N] ,float M,int n) /*先放单位价值量大的物体,再考虑小的物体*/
{
int i;
float maxprice;
for (i = 0; i < n; i++)
x[i] = 0;
i = 0;
maxprice=0;
while (i < n && w[i] < M)
{
M=M-w[i];
x[i] =w[i]; /* 表示放入数量 */
maxprice=maxprice+p[i];
x[n-1]=M;
i++;
}
if (i < n &&M> 0)
{
maxprice=maxprice+p[i]*x[i]/w[i];
i++;
}
return maxprice;
}

int main()
{
int n,flag=1;
float temp,M,w[N],p[N],x[N];
int a[N],b[N];
int k,j,l=0;
printf(

⑥ C语言关于贪心算法的(很简单)

LZ在开始研究ACM嘛?
#include
int
least_num_cash(int
_money)
{
/*直接贪心,能用大张的钞票尽量用大张的*/
int
ret=0;
while(_money!=0)
{
if(_money>=100)
{
_money-=100;
}
else
if(_money>=50)
{
_money-=50;
}
else
if(_money>=20)
{
_money-=20;
}
else
if(_money>=10)
{
_money-=10;
}
else
if(_money>=5)
{
_money-=5;
}
else
if(_money>=2)
{
_money-=2;
}
else
if(_money>=1)
{
_money-=1;
}
ret++;
}
return
ret;
}
int
main()
{
int
n,m;
while(scanf("%d%d",&n,&m)!=EOF)
{
printf("%d\n",least_num_cash(m-n));
}
return
0;
}

⑦ c语言 贪心算法 小朋友分组 急急急急急急急 立刻!!!!!!!

int fun(int *a, int n, int MinC, int MaxC)
{
int pmin, pmax, smin, smax, i;
pmin = pmax = smin = smax = 0;
for(i=0; i<n; i++)
{
if(a[i] < MinC)pmin += (MinC - a[i]);
if(a[i] > MaxC)pmax += (a[i] - MaxC);
smin += (a[i] - MinC);
smax += (a[i] - MaxC);
}
if(pmin == pmax)return pmin;
if(pmin > pmax && smin > 0)return pmin;
if(pmax > pmin && smax < 0)return pmax;
return -1;
}
void main()
{
int a[] = {20,8,6};
printf("%d %d %d",fun(a,3,10,15),
fun(a,3,5,20),fun(a,3,1,2));
}

看一下fun函数行不行

⑧ C语言,贪心算法,货币找零问题

贪心算法找零就是现实中从最大面额开始找的思路。不代表是最优解,只是算法之一。

由于面额输入顺序不定,我先对输入的面额进行降序排序。

下面代码:

#include <stdio.h>

#include <malloc.h>

int main()

{

int i,j,m,n,*ns=NULL,*cn=NULL,sum=0;

printf("请输入总金额m及零钱种类n:"),scanf("%d",&m),scanf("%d",&n);

printf("请分别输入%d种零钱的面额: ",n);

if(!(ns=(int *)malloc(sizeof(int)*n))) return 1;

if(!(cn=(int *)malloc(sizeof(int)*n))) return 1;

for(i=0;i<n;i++) scanf("%d",&ns[i]);

//------------考虑输入面额顺序不定,先对面额进行降序排列(如按照降序输入,该段可删除)

for(i=0;i<n;i++)

for(j=i+1;j<n;j++)

if(ns[j]>ns[i]) ns[j]^=ns[i],ns[i]^=ns[j],ns[j]^=ns[i];

//-------------------------------------------------------------------

for(i=0;i<n;i++)//贪心算法,从最大面额开始

if(m>=ns[i])

cn[i]=m/ns[i],m=m%ns[i],sum+=cn[i],printf("%d元%d张 ",ns[i],cn[i]);

printf(" 最少使用零钱%d张 ",sum);

return 0;

}

⑨ 很简单的C语言贪心算法,用map做的,但我对map有个问题

改成 pw.insert(make_pair(5,10));

⑩ C语言贪心算法的问题

#include <stdio.h>
#define n 7 //有多少个物品种类
struct goods //定义物品的各个属性
{
int x; //物品放入背包的重量
int order; //物品编号
int p; //物品总价值
int w; //物品总重量
};
int Strategy1(struct goods goods[],int m) //策略一:按物品重量降序装包
{
struct goods temp;
float value=0;
int i,j,k=0;
for(i=0;i<n-1;i++) //按照物品总价值降序排列(上面不是说要按重量排序吗?n怎么没定义?)
{
for(j=i+1;j<n;j++)
{
if(goods[j].p>goods[i].p)
{
temp=goods[i];
goods[i]=goods[j];
goods[j]=temp;
}
}
}
for(;k<n;k++) //开始装包
{
if(goods[k].w>m)
break;
goods[k].x=goods[k].w;
m-=goods[k].w; //(看程序m应该是重量限制吧!前三个装包已经超重了,第四个当然 就没法装包了啊)

value+=goods[k].p;
}
if(k<n)
{
goods[k].x=m;
value=((float)m/goods[k].w)*goods[k].p;
}
printf("这是策略一的结果:\n"); //输出结果
for(i=0;i<n;i++)
{
printf("商品%d有%f放入背包\n",goods[i].order,(float)(goods[i].x/goods[i].w));
}
printf("商品的总价值为%f",value);
return value;
}
void main()
{
float value1;
struct goods goods[7]={0,1,10,2,0,2,5,3,0,3,15,5,0,4,7,7,0,5,6,1,0,6,18,4,0,7,3,1};
int m=15;
value1=Strategy1(goods,m);

热点内容
如何通过网吧电脑进入网吧服务器 发布:2025-01-10 22:22:30 浏览:704
数据库缓存是什么 发布:2025-01-10 22:21:05 浏览:384
dns配置出现错误该怎么办 发布:2025-01-10 22:13:00 浏览:437
云顶算法 发布:2025-01-10 22:10:07 浏览:988
收件服务器有什么作用 发布:2025-01-10 21:50:01 浏览:389
安卓70缓存 发布:2025-01-10 21:49:03 浏览:682
图像检索算法 发布:2025-01-10 21:43:58 浏览:557
plsqlforupdate 发布:2025-01-10 21:43:50 浏览:915
如何设置健康码快捷方式vivo安卓 发布:2025-01-10 21:39:52 浏览:502
安卓不兼容怎么解决 发布:2025-01-10 21:37:02 浏览:31