#include <math.h>
#include <iostream>
#include <cstdlib>
#include <stdlib.h>
#include <time.h>
#include <cstring>
double MAX(int Size,double arr[]){
int max =arr[0];
for (int i = 1; i < Size; ++i)
{
if(fabsf(arr[i])>max)
max = fabsf(arr[i]);
}
return max;
}
double SUM(int Size,double arr[]){
double sum = 0;
int i = Size -Size;
do{
i++;
if(arr[i]>0) break;
}while(i>0);
if(i==0) return 0;
for(i=i;i<Size;i++)
sum =sum+arr[i];
return sum;
}
void sort(int Size,double *arr, double A, double B){
int count = 0;
int i,j;
for(i = 0;i<Size;i++){
double tmp = *(arr+i)<0? : *(arr+i);
if(A<=tmp && tmp<=B){
count ++;
}
}
i = 0;
while(count>0){
printf("%d",count);
double tmp = *(arr+i)<0? : *(arr+i);
if(A<=tmp && tmp<=B){
for(j =i;j<Size;j++){
*(arr+j)=*(arr+j+1);
}
*(arr+Size-1)=0;
count--;
Size--;
}
if(A>tmp || tmp>B){
i++;
}
}
}
int main(int argc, char** argv) {
double *arr;
int arrSize = 10;
int ifRand = 0;
double A,B,max,sum;
char test[] = "-rand";
for(int i=1;i<argc;i++)
{
if(strcmp(test,argv[i])==0){
ifRand = 1;
break;
}
}
fflush(stdin);
if(ifRand){
srand(time(0));
arr = new double[arrSize];
for (int i=0; i<10; i++)
arr[i] =(double)rand()/RAND_MAX*100-50;
A = (double)rand()/RAND_MAX*100-50;
B = (double)rand()/RAND_MAX*100-50;
if(A>B){
double tmp = A;
A=B;
B=tmp;
}
}else{
printf("\n Ievadiet masiva garumu: ");
scanf("%d", &arrSize);
arr = new double[arrSize];
double elements;
for (int i = 0; i < arrSize; i++) {
printf("Ievadiet masiva elementu %d \n", i + 1);
scanf("%lf", &elements);
arr[i] = elements;
}
printf("Ievadiet A \n");
scanf("%lf", &A);
printf("Ievadiet B \n");
scanf("%lf", &B);
}
printf("Masivs:\n");
for (int i = 0; i < arrSize; i++) {
printf("\%.3f ", arr[i]);
}
printf("\nA = %.3f",A);
printf("\nB = %.3f",B);
max = MAX(arrSize,arr);
sum = SUM(arrSize,arr);
sort(arrSize,arr,A,B);
printf("\nLielaka vertiba ir %.3f",max);
printf("\nSumma vertibam pec pirma pozitiva elementa ir %.3f",sum);
printf("\nMasivs pec saspiesanas:");
for (int i = 0; i < arrSize; i++) {
printf("\%.3f ", arr[i]);
}
return ifRand;
}
添加完整代码。
我有用户决定大小和元素值的数组,他还要决定区间A和B. A和B之间的所有数字都必须在数组前面移动,我拥有的代码是我的东西发现它被用于类似的代码,A和B之间的所有数字都将被删除,其余的数字被推到开始。
我需要的是:在5个元素{1,2,3,4,5}和区间A(2)和B(4)的数组中。结果应该看起来像{2,3,4,1,5}。
如果还有其他方法,我不需要上面的代码。它正是我发现并尝试使用的。答案 0 :(得分:1)
我需要的是:在5个元素的数组中{1,2,3,4,5} 和区间A(2)和B(4)。结果应该看起来像{2,3,4,1,5}。一世 如果有其他方法,不需要上面的代码。它正是我所拥有的 发现并试图使用。
您可以使用标头std::stable_partition
中声明的标准算法<algorithm>
。
这是一个示范程序
#include <iostream>
#include <utility>
#include <iterator>
#include <algorithm>
int main()
{
int a[] = { 1, 2, 3, 4, 5 };
std::pair<int, int> range(2, 4);
for (int x : a) std::cout << x << ' ';
std::cout << std::endl;
std::stable_partition( std::begin( a ), std::end( a ),
[&]( const int &item )
{
return range.first <= item && item <= range.second;
});
for (int x : a) std::cout << x << ' ';
std::cout << std::endl;
return 0;
}
程序输出
1 2 3 4 5
2 3 4 1 5
答案 1 :(得分:0)
查看http://en.cppreference.com/w/cpp/algorithm/stable_partition并按照以下方式使用它:
void sort_to_front(int Size, double *arr, double A, double B)
{
stable_partition(arr, arr + Size, [&](double a){ return a >= A && a <= B; });
}