用c++如何實作以下問題;
1、輸入N個數;
2、輸出n個數,n<N,滿足n個數字的和大于N個數字和的80%,要求n最小。
解決思路,先求N個數的和,并將N個數排序,從大到小依次相加,直到滿足條件為止輸出n個數,但在程序中出現很多問題,求大牛指教,能不能幫忙提供代碼
uj5u.com熱心網友回復:
是這樣嗎#include <bits/stdc++.h>
using namespace std;
const int maxn=2e5+5;
const int inf=0x3f3f3f3f;
int a[maxn];
int main()
{
int n,sum=0,all=0;
cin>>n;
for(int i=1;i<=n;++i)cin>>a[i];
for(int i=1;i<=n;++i)all+=a[i];
sort(a+1,a+n+1);
int now=n;
while(now>=1&&sum*10<=all*8){//sum<=all*0.8
cout<<sum<<" "<<all<<endl;
sum+=a[now];
--now;
}
for(int i=n;i>now;--i){
cout<<a[i]<<" ";
}
cout<<endl;
return 0;
}
uj5u.com熱心網友回復:
#include <iostream>#include <algorithm>
#include <cmath>
using namespace std;
bool cmp(int a, int b)
{
return a > b;
}
int main()
{
int num;
float arr[20] = {0.0};
float sum = 0;
cout << "input number of input:";
cin >> num;
for (int i = 0; i < num; i++)
{
cin >> arr[i];
sum += arr[i];
}
sort(arr, arr + num, cmp);
float temp = arr[0];
int i=0;
while (temp<= sum*0.8)
{
cout << arr[i] << " ";
i++;
temp += arr[i];
}
cout << arr[i] << endl;
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/78817.html
標籤:C++ 語言
上一篇:救救孩子吧,真的不會了
下一篇:請教各位大佬,這個問題:文本后綴“,c1”無效;未找到文文本運算子或文本運算子模板“operator """",c1”
