如下图,想求解一下这个算法的话,怎么才对呢?我试了几个办法,貌似都不对。
附上我自己的代码块,但是系统提示结果不正确
import java.util.Scanner;
public class Cook {
public static void exchange(int array[],int i,int j){
array[i] = array[i] ^ array[j];
array[j] = array[j] ^ array[i];
array[i] = array[j] ^ array[i];
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextInt()){
int copies = scanner.nextInt();
int[] a = new int[copies];
long sum = 0;
long startVitality = 0;
int x = 1;
long temp = 0;
for(int i = 0; i < copies; i ++){
a[i] = scanner.nextInt();
startVitality += a[i];
}
for (int i = 0; i < a.length-1; i++) {
for (int j = i+1; j < a.length; j++) {
if(a[i] < a[j])
Cook.exchange(a, i, j);
}
}
if(copies == 4){
for(int i=0; i < a.length-1; i++){
sum += startVitality;
startVitality -= a[i];
}
System.out.println(sum);
System.exit(0);
}
while(true){
if((1<<x) < copies)
x++;
else
break;
}
for(int i=0; i < (1<<x)-copies; i++)
temp += a[i];
sum = startVitality * x - temp;
System.out.println(sum);
}
}
}
#include
#include
using namespace std;
void swap(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
int partition(int * array_list,int left,int right)
{
int index = left;
int pivot = array_list[right];
for(int i= left ; i< right; i++)
{
if(array_list[i] < pivot)
{
swap(array_list[index],array_list[i]);
index ++;
}
}
swap(array_list[right],array_list[index]);
return index;
}
void quick_sort(int * array_list,int left,int right) {
if(left >= right)
{
return ;
}
int index = partition(array_list,left,right);
quick_sort(array_list,left,index - 1);
quick_sort(array_list,index + 1,right);
}
void Init(int *A,int n){
for(int i=0;i cin>>A[i];
}
}
int Result(int *A,int n){
int k=A[0];
int sum=0;
for(int i=1;i<n;i++){
k+=A[i];
sum+=k;
}
return sum;
}
int main(){
int A[100];
int n;
cin>>n;
Init(A,n);
quick_sort(A,0,n-1);
cout<<Result(A,n);
return 0;
}
#include
#include
using namespace std;
void swap(int &a,int &b){
int temp=a;
a=b;
b=temp;
}
int partition(int * array_list,int left,int right)
{
int index = left;
int pivot = array_list[right];
for(int i= left ; i< right; i++)
{
if(array_list[i] < pivot)
{
swap(array_list[index],array_list[i]);
index ++;
}
}
swap(array_list[right],array_list[index]);
return index;
}
void quick_sort(int * array_list,int left,int right) {
if(left >= right)
{
return ;
}
int index = partition(array_list,left,right);
quick_sort(array_list,left,index - 1);
quick_sort(array_list,index + 1,right);
}
void Init(int *A,int n){
for(int i=0;i cin>>A[i];
}
}
int Result(int *A,int n){
int k=A[0];
int sum=0;
for(int i=1;i<n;i++){
k+=A[i];
sum+=k;
}
return sum;
}
int main(){
int A[100];
int n;
cin>>n;
Init(A,n);
quick_sort(A,0,n-1);
cout<<Result(A,n);
return 0;
}