Linux互联网科技程序员

2007北京市小学生程序设计友谊赛详细答案

2018-12-19  本文已影响13人  海天一树X

第1题

解法一:在cmath或math.h中,有个round()函数,可以实现四舍五入。

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int a;
    cin >> a;
    cout << round(a * 2.54) << endl; 

    return 0;
}

注意:网络上有些人说round()不是四舍五入,而是四舍六入五成双,即round(5.5) = 6, round(6.5) = 6。
我通过在Dev C++, Codeblocks和g++测试,发现C中的round()就是四舍五入,而不是四舍六入五成双。
测试代码为:

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    float a = 0.5;
    while(a < 100)
    {
        cout << a << ',' << round(a) << endl;
        a += 1.0;
    }

    return 0;
}

解法二:不使用round()函数

#include <iostream>
using namespace std;

int main()
{
    int inch;
    cin >> inch;
    float cm = inch * 2.54;
    cout << int(cm + 0.5) ;

    return 0;
}

第2题

#include <iostream>
using namespace std; 

struct rabbit
{
    string name;    // 名字 
    int len;        // 长度 
    int time;       // 时间 
    float v;        // 速度 
};
 
int main() 
{
    int n; 
    cin >> n;
    float maxV = 0;
    string winner;
    
    rabbit r[n];
    for(int i = 0; i < n; i++)
    {
        cin >> r[i].name >> r[i].len >> r[i].time;
        r[i].v = (float)r[i].len / r[i].time;
        if(r[i].v > maxV)
        {
            maxV = r[i].v;
            winner = r[i].name;
        }
    } 
    
    cout << winner << endl;
    return 0;
}

第3题

#include <iostream>
using namespace std; 

void bubbleSort(int a[], int n)
{
    for(int i = 0; i < n - 1; i++)
    {
        for(int j = 0; j < n - 1 - i; j++)
        {
            if(a[j] > a[j+1])
            {
                swap(a[j], a[j + 1]);
            }
        }
    }
}
 
int main() 
{
    int n; 
    cin >> n;
    int h[n];
    // 这道题用了冒泡排序,下标建议为0~n-1 
    for(int i = 0; i < n; i++)
    {
        cin >> h[i];
    }
    
    bubbleSort(h, n);
    
    int height;
    cin >> height;
    int begin, end;
    for(int i = 0; i < n; i++)
    {
        if(h[i - 1] != height && h[i] == height)
        {
            begin = i;
        }
        
        // 注意,这个if不能改为else if,为什么? 
        if(h[i] == height && h[i + 1] != height)
        {
            end = i;
        }
    }
    
    // 下标记得+1 
    cout << begin + 1 << ' ' << end + 1<< endl;
    
    return 0;
}

完整答案请加微信307591841或QQ307591841


公众号.jpg
上一篇下一篇

猜你喜欢

热点阅读