本篇文章给大家谈谈合并果子c语言,以及合并果子c语言编程对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、C语言 合并果子问题2、C语言 合并果子(类哈夫曼树)问题3、高分C语言问题~~·高手请进4、C语言合并果子问题5、c++ 合并果子 求解哪错了
C语言 合并果子问题
其他都写得不错 但是算法出了点问题
正确的顺序应该是:排序-最小的两项相加-排序-最小的两项相加-排序-最小的两项相加-排序-最小的两项相加……….
而不是:排序-最小的两项相加-依次往后相加-……..
给你一段我写的
#include stdio.h
#define N 100
int count[N];
int main()
{
int kind,i;
double sum=0;
void compare(int m);
scanf(“%d”,kind);
for(i=0;ikind;i++)
scanf(“%d”,count[i]);
for(i=0;ikind-1;i++)
{
compare(kind);
sum+=count[0]+count[1];
count[0]=sum;
count[1]=count[kind-1]+1;
}
printf(“%lf”,sum);
return 0;
}
void compare(int m)
{
int i,j;
for(i=0;im-1;i++)
for(j=i;jm-i-1;j++)
if(count[j]count[j+1])
{
count[j]=count[j]+count[j+1];
count[j+1]=count[j]-count[j+1];
count[j]=count[j]-count[j+1];
}
}
C语言 合并果子(类哈夫曼树)问题
这段代码恐怕达不到目的。有如下问题,看注释:
for(j=num;j=0;j–){ //要改成j0,因为j从num开始,到1就够数儿了
bubble_sort(a,n);
b[j-1]=a[j-1]+=a[j];//要改成b[j-1]=a[j-2]+=a[j-1],因为j=num开始
n=n-1;
}
for(j=num;j=0;j–){//改成j=num-1;j0;j–。num就越界了,而b[0]还没有赋值,是随机的
total+=b[j];
}
//final=total-temp; 这句没有必要了
printf(“%d”,final);//改成printf(“%d”,total);
}
另:函数bubble_sort改成void型吧,无需返回值,实现中也没有……
以上意见仅供参考……
高分C语言问题~~·高手请进
思路:
A[n]中,n代表有多少堆果子,A中的元素代表各堆的果子数目
int getValue(int A[])
{
初始 int S=0
1. (数组A)n个数字从小到大排序 (例如:1,2,9)
2. 取上步中最小的两个数相加之和为一个M , S=S+M
3. 数组A中除去最小的两个数,然后将M加进去形成一个新数组A元素个数为 n=n-1
4. n1时回到1.否则函数返回S+A[0] (或S+M,因为最后A[]中只有一个元素了,就是M)
}
没有考虑细节.你要是写不出来的话,给我回话
C语言合并果子问题
#includestdio.h
int a[10001],b[10001],h1=1,h2=1,t1=1,t2=0,ans=0,num=0;
void qs(int left,int right)
{
if(left=right) return;
int i=left,j=right;
a[0]=a[left];
while(ij)
{
while(a[right]=a[0]ij) j–;
if(ij)a[i]=a[j];
while(a[left]=a[0]ij) i++;
if(ij) a[j]=a[i];
}
a[i]=a[0];
qs(left,i-1);
qs(i+1,right);
}
int main()
{
int n;
FILE *fp;
memset(a,5,sizeof(a));
fp=fopen(“fruit.in”,”r”);
fscanf(fp,”%d”,n);
int t,i,j;
memset(b,5,sizeof(b));
for(t=1;t=n;t++)
fscanf(fp,”%d”,a[t]);
qs(1,n);
t1=n;
h1+=2;
t2++;
b[t2]=a[1]+a[2];
ans+=b[t2];
while(++numn-1)
{
if(a[h1+1]=b[h2]) {b[++t2]=a[h1]+a[h2]; ans+=b[t2]; h1+=2;}
else if(a[h1]=b[h2+1]) {b[++t2]=b[h2]+b[h2+1];ans+=b[t2]; h2+=2;}
else {b[++t2]=a[h1++]+b[h2++]; ans+=b[t2];}
}
fp=fopen(“fruit.out”,”w”);
fprintf(fp,”%d”,ans);
fclose(fp);
return 0;
}
c++ 合并果子 求解哪错了
这位同学答得满好的
你的程序是没问题
可能是因为你没考虑多组数据的情况。
代码修改如下:
#includeiostream
#includealgorithm
#includecstdio
#includecstring
using namespace std;
int a[10050]={0};
int sum[10050]={0};
int main()
{
int n;
int suma;
int i,j;
while(cinn){
suma = 0;
for(i=1;i=n;i++)
cina[i];
sort(a+1,a+n+1,greaterint());
for(j=1;jn;j++){
sum[j]=a[n-j+1]+a[n-j];
suma+=sum[j];
for(i=n-1-j;i=1;i–){
if(sum[j]a[i]){
for(int p=n-j-1;pi;p–){
a[p+1]=a[p];
}
a[i+1]=sum[j];
break;
}
}
}
coutsumaendl;
}
return 0;
}
合并果子c语言的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于合并果子c语言编程、合并果子c语言的信息别忘了在本站进行查找喔。