在数组中查找最大的倍数,然后将其写入反之亦然

时间:2013-12-02 22:04:24

标签: c++

我接到了一项任务:

给出一个包含五个数字的数组

首先 - 查找四倍的所有数字
第二 - 找到最大的,反之亦然。

我写了一段代码。

#include <iostream>
#include <iomanip>
using namespace std;
#define size 12
int main()
{
int new_max=0;
int a1, a2;
int i=0, j=0;
int a, b, c=0;
int u[size]={38,12,36,45,16,46,14,19,54,53,95, 98};
int max=0;
cout<<"Array: \n";
for(i=0; i<size; i++)
cout<<u[i]<<" \n";
for (int i=0; i<size; i++)
{
    if (u[i]%4==0)
    {
        cout<<"array "<<u[i]<<" \n";
        for (int j=0; j<size; j++)
        {
            if(max<u[i])
            {
                max=u[i];
            }}}}

cout<<"max "<<max<<endl;


 while(max > 0)
{
        new_max = new_max*10 + ( max % 10);
        max = max/10;
}
cout << new_max << endl;
return 0;
}

1 个答案:

答案 0 :(得分:0)

#include <iostream>
#include <algorithm>
#include <string>
#include <array>

int main() {
    std::array<int, 5> input = { 36, 12, 38, 45, 16 };
    auto validRangeEnd = std::remove_if(std::begin(input),
                                        std::end(input),
                                        [](int i){ return i % 4 != 0; });
    // Now std::begin(input) -> validRangeEnd contain the ones divisible by 4
    auto max = std::max_element(std::begin(input), validRangeEnd);
    // Max contains the max number from the filtered range
    auto stringMax = std::to_string(*max);
    std::reverse(std::begin(stringMax), std::end(stringMax));
    // Reverse reverses the max number
    std::cout << stringMax;
}

绝不是最佳的,但我觉得它对教育目的很有用:) (remove_if和max_elements都执行了一次传递,所以我会重新检查一些我不需要的东西,但这仍然是问题的一个很好的算法表示。而且,没有循环,看!:))