注册 登录
编程论坛 C++教室

【求助】c++旗手问题

asdfaad 发布于 2019-02-10 20:42, 4476 次点击
题目描述
导游常常都喜欢从所带的旅游团中选一个身高最高的游客,站在旅游团的前面拿旗帜,现在给定n个游客的身高(都是正整数),将身高最高的游客(如果最高的游客不唯一,那么选择最前面的那个)和第一个游客调换,再依次输出他们的身高。
输入
第一行n(1<=n<=10000)

第二行包含n个正整数,中间用空格隔开,表示n个游客的身高

输出
一行n个正整数,每两个数之间用空格隔开,表示调换后,各个位置上游客的身高
样例输入
6
160 155 170 175 172 164
样例输出
175 155 170 160 172 164
4 回复
#2
Canvas2019-02-15 11:25
VS2017,若有不当请多指教<(^-^)>
程序代码:
#include "pch.h"
#include <iostream>
using namespace std;
int main()
{
    int num;//队伍人数
    cin >> num;
    if (num < 1 || num>10000)
    {
        cout << "Impossible number of tourist!";
        exit(1);
    }//检验队伍人数范围
    cout << "ok1" << endl;//1
    int *p = new int[num];//建立身高数组
    for (int i = 0; i < num; i++)
    {
        cin >> *(p + i);
    }
    cout << "ok2" << endl;//2
    int Highest = *p;
    int Highestnum = 0;
    for (int i = 0; i < num; i++)//寻找最高
    {
        bool IsHighest = true;//假定某人最高
        Highest = *(p + i);
        for (int j = 0; j < num; j++)
        {
            if (Highest < *(p + j))
            {
                IsHighest = false;
                break;
            }//如果身高小于任何一个人,不是最高
        }
        if (IsHighest)
        {
            Highestnum = i;
            break;
        }//如果不小于任何一个人,是最高
    }
    cout << Highestnum << endl;//3
    int temp;//交换第一个人和最高的人的顺序
    temp = *p; *p = *(p + Highestnum); *(p + Highestnum) = temp;
    for (int i = 0; i < num; i++)
        cout << *(p + i) << ' ';//输出
}
#3
Canvas2019-02-15 11:27
忘了delete p;了o( ̄┰ ̄*)ゞ
#4
rjsp2019-02-15 12:32
代码越啰嗦,耗费的开发时间越多,调试越烦,可能的错误越多

程序代码:
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
using namespace std;

int main( void )
{
    // 输入 n
    size_t n;
    cin >> n;

    // 输入 n 个身高
    std::vector<unsigned> heights( n );
    copy_n( istream_iterator<decltype(heights)::value_type>(cin), n, begin(heights) );

    // 找到第一个最高者位置,并与首位游客交换
    auto itor = max_element( begin(heights), end(heights) );
    iter_swap( itor, begin(heights) );

    // 输出所有游客身高
    copy( begin(heights), end(heights), ostream_iterator<decltype(heights)::value_type>(cout," ") );
}

#5
zoom_zzZ2019-02-21 17:26
回复 楼主 asdfaad
#include<iostream>
using namespace std;
int main()
{
    int n,i,max;
    cin>>n;
    int *persons=new int[n];
    for(i=0;i<n;i++)
    {
        cin>>persons[i];
    }
    max=persons[0];
    for(i=1;i<n;i++)
    {
        if(persons[i]>max)
        {
            max=persons[i];
        }
    }
    for(i=0;i<n;i++)
    {
        if(persons[i]==max)
        {
            persons[i]=persons[0];
            persons[0]=max;
        }
    }
    for(i=0;i<n;i++)
    {
        cout<<persons[i]<<" ";
    }
    return 0;
}
1