c++ 合并果子 边界处理问题
答案:2 悬赏:40 手机版
解决时间 2021-02-26 02:35
- 提问者网友:练爱
- 2021-02-25 13:30
这是我的代码;已经是第二次提问了,还是不太懂;希望大神点拨。
#include
#include
#include
using namespace std;
int a[10005];
int main()
{
int n;int i,j,p;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n+1,greater());
int sum=0;
for(i=n;i>1;i--)
{
sum+=a[i]+a[i-1];
a[i-1]=a[i]+a[i-1];
a[i]=0;
for(j=i-2;j>=1;j--)
{
if(a[j]>a[i-1]&&j!=0)
{
for(p=i-2;p>=j+2;p--) a[p]=a[p-1];
a[j+1]=a[i-1];
break;
}
}
}
cout< return 0;
}
多谢朋友们,我已经知道哪里错了
最佳答案
- 五星知识达人网友:鱼芗
- 2021-02-25 14:02
#include
#include
using namespace std;
#define N 10050
int main()
{
unsigned long a[N]={0};
unsigned long sum[N]={0};
unsigned long n;
unsigned long suma;
unsigned long i,j;
unsigned long p;
while(cin>>n){
for(i=0;i
for(i=1;i<=n;i++)
cin>>a[i];
//边界检测
if(n==1){
cout << a[1] << endl;
continue;
}
sort(a+1,a+n+1,greater());
suma = 0;
for(j=1;j
sum[j]=a[n-j]+a[n-j+1];
suma = suma + sum[j];
for(i=n-j-1;i>=1;i--){
if(a[i]>=sum[j]){//找到一个比sum[j]大的
for(p=n-j-1;p>i;p--){// 后移
a[p+1]=a[p];
}
a[i+1]=sum[j];//
a[n-j+1]=0;
break;
}
}
if(i==0){//sum[j]最大
for(p=n-j-1;p>=1;p--){
a[p+1] = a[p];
}
a[1]=sum[j];
}
}
cout<
}
return 0;
}
全部回答
- 1楼网友:愁杀梦里人
- 2021-02-25 14:09
贪心。 #include<stdio.h> #include<stdlib.h> const int n=20000; void main() { long jieguo=0; int mycompare(const void *,const void *); int a[n]; int n,i; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); qsort(a,n,sizeof(int),mycompare); for(int i=0;i<n;i++) jieguo+=a[i]*(n-i); printf("%l",jieguo); } int mycompare(const void*a,const void*b) { return *(int*)a-*(int*)b; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯