前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2008北京市小学生程序设计友谊赛详细答案

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

作者头像
海天一树
发布2018-12-29 16:52:28
4410
发布2018-12-29 16:52:28
举报
文章被收录于专栏:海天一树海天一树

第1题

分析:因为小数位数不固定,所以不能用double,所以只能用字符数组。

代码语言:javascript
复制
#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
    freopen("first.in", "r", stdin);
    freopen("first.out", "w", stdout);

    string a; // 或char a[10000];
    cin >> a;
    cout << a;

    return 0;
}

第2题

代码语言:javascript
复制
#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
//    freopen("count.in", "r", stdin);
//    freopen("count.out", "w", stdout);

    int n;
    cin >> n;
    int num = 1;    // 每层的数量
    int total = 1;  // 所有层的数量
    for(int i = 2; i <= n; i++)
    {
        num += i;
        total += num;
    }

    cout << total << endl;

    return 0;
}

第3题

分析:本题考察冒泡排序。

解法一:

代码语言:javascript
复制
#include <iostream>
#include <cstdio>
using namespace std;

#define swapTube(i, j) swap(len[i], len[j]);swap(dia[i], dia[j]);swap(code[i], code[j])

int main()
{
//    freopen("best.in", "r", stdin);
//    freopen("best.out", "w", stdout);

    int n;
    cin >> n;
    int len[n], dia[n], code[n];
    for(int i = 0; i < n; i++)
    {
        cin >> len[i] >> dia[i] >> code[i];
    }

    for(int i = 0; i < n - 1; i++)
    {
        for(int j = i + 1; j < n; j++)
        {
            if(len[i] < len[j])
            {
                // 长度从大到小
                swapTube(i, j);
            }
            else if(len[i] == len[j])
            {
                if(dia[i] > dia[j])
                {
                    // 直径从小到
                    swapTube(i, j);
                }
                else if(dia[i] == dia[j])
                {
                    if(code[i] < code[j])
                    {
                        // 编号从大到小
                        swapTube(i, j);
                    }
                }
            }
        }
    }

    cout << code[0] << endl;

    return 0;
}

解法二:

代码语言:javascript
复制
#include <iostream>
#include <cstdio>
using namespace std;

struct steelTube
{
    int len;
    int dia;
    int code;
};

int main()
{
    freopen("best.in", "r", stdin);
    freopen("best.out", "w", stdout);

    int n;
    cin >> n;
    steelTube tube[n];
    for(int i = 0; i < n; i++)
    {
        cin >> tube[i].len >> tube[i].dia >> tube[i].code;
    }

    for(int i = 0; i < n - 1; i++)
    {
        for(int j = i + 1; j < n; j++)
        {
            if(tube[i].len < tube[j].len)
            {
                // 长度从大到小
                swap(tube[i], tube[j]);
            }
            else if(tube[i].len == tube[j].len)
            {
                if(tube[i].dia > tube[j].dia)
                {
                    // 直径从小到大
                    swap(tube[i], tube[j]);
                }
                else if(tube[i].dia == tube[j].dia)
                {
                    if(tube[i].code < tube[j].code)
                    {
                        // 编号从大到小
                        swap(tube[i], tube[j]);
                    }
                }
            }
        }
    }

    cout << tube[0].code << endl;

    return 0;
}

思考:

1 这里为何可以直接对自定义的结构体steelTube使用swap()函数? 2 如果自己定义一个交换两根钢管的函数swap_(),该如何实现?动手试试。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-12-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 KidsCode少儿编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第1题
  • 第2题
  • 第3题
    • 解法一:
      • 解法二:
        • 思考:
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档