永发信息网

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; }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯