【Educoder作业】C&C++数组实训

这篇具有很好参考价值的文章主要介绍了【Educoder作业】C&C++数组实训。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Educoder作业】C&C++数组实训

数组是很好用的。作为一个最基本的数据结构,数组是构成高级结构的基础。简单点的比如列表的next和head指针,桶的下标,栈;复杂点的比如说线段树的节点,KD树的平面,我们都需要数组进行实现。

T1 销售波动统计

这个题目显然是容易的,注意不要从 i = = 0 i==0 i==0开始即可。

#include <stdio.h>
#include <iostream>
using namespace std;

int main()
{
    int n, a[30], i;     // 定义变量及数组,n-销售额个数,a-销售额
    cin >> n;     // 输入销售额数量,n <= 30
    // 输入n个销售额,分别存入a[0]到a[n-1]
    for(i = 0; i < n; i++)
        cin >> a[i];
    // 请在此添加代码,计算并输出销售额的波动情况
    /********** Begin *********/
	for (i = 1; i < n; i ++ ) printf("%d ", a[i] - a[i - 1]);
	puts("");
    
    
    /********** End **********/
    return 0;
}

T2 最大销售增幅

这种往函数里面传数组的操作在程序设计竞赛里面是极其愚蠢的,因为常数非常大导致低效;但是在程序实现中带来的方便是不可忽略的,写起来很简单。

#include <iostream>
using namespace std;

// 函数maxIncrease:计算销售额增幅
// 参数:s-销售额数组,n-销售额数组长度,n>1
// 返回值:销售额最大增幅
int maxIncrease(int s[], int n);

int main()
{
    int n, a[30], i;     // 定义变量及数组,n-销售额个数,a-销售额数组
    cin >> n;      // 输入销售额数量,n>1
    // 输入n个销售额,分别存入a[0]到a[n-1]
    for(i = 0; i < n; i++)
        cin >> a[i];
    i = maxIncrease(a,n);
    cout << "最大销售增幅为:" << i << endl;
    return 0;
}

int maxIncrease(int s[], int n)
{
    //请在此添加代码,实现函数maxIncrease
    /********** Begin *********/
	int ans = 0xefefefef;
	for (int i = 0; i < n; i ++ ) {
		for (int j = i; j < n; j ++ ) {
			ans = max(ans, s[j] - s[i]);
		}
	}
	return ans;
    /********** End **********/
}

T3 猴子选大王

这个题是有一点意思的。
首先,我们的思路先考虑每一次淘汰:只需要从当前的开始往后找到第一个满足条件的猴子即可。这个操作可以用 f o r ( i n t   i = 1 ; i < n ; i + + ) for(int\ i = 1; i < n; i ++) for(int i=1;i<n;i++)实现因为最后要淘汰 n − 1 n-1 n1个猴子,也可以用 w h i l e while while来实现,只需要判断当前的猴子数目即可。
最后就用 w h i l e while while或者 f o r + b r e a k for+break for+break找一下剩下的猴子即可,

#include <iostream>
using namespace std;

// 函数king:猴子选大王
// 参数:a-猴子数组n-1个猴子分别占据下标为~n-1的位置,n-数组长度
// 返回值:新猴王的下标序号
int king(int a[], int n);

int main()
{
    int n, a[1000], i;     // 定义变量及数组,n-猴子数量,a-猴子数组
    cin >> n;     // 输入猴子数量,n>0

    // 初始化猴子数组,n 个猴子分别占据 n 个位置
    a[0] = 0; // 0号位置没有猴子
    for(i = 1;i <= n; i++)
        a[i] = i;

    // 选大王啦
    i = king(a, n);
    cout << i << "号猴子是大王。" << endl;
    return 0;
}

int king(int a[], int n)
{
    // 请在此添加代码,实现函数king
    /********** Begin *********/
    int num = n, now = 1, tmp = 1;
    while (num > 1) {
        while (!a[now]) {
            if (now == n) now = 1;
            else now ++ ;
        }
        if (tmp == 3) a[now] = 0, num -- , tmp = 1;
        else tmp ++ ;
        now ++ ;
        if (now == n + 1) now = 1;
    }
    while (!a[now]) {
		if (now == n) now = 1;
		else now ++ ;
	}
    return now;
    /********** End **********/
}

T4 犯二的程度

有那么一点高精度的味道了。处理当然是容易的,扫一下数组加几个 i f if if就结束了。

#include <iostream>
using namespace std;

// 函数silly:计算数值有多二
// 参数:a-存储数值的字符数组,以'\0'结束,所以不需要另一个参数告诉函数数组有多长
// 返回值:数值犯二的程度
double silly(char a[]);

int main()
{
    char s[102];     // 定义存储数值的数组
    cin >> s;     // 输入不超过位的整数
    double sy = silly(s);     // 计算犯二的程度
    cout << sy << endl;     // 输出犯二的程度
    return 0;
}

double silly(char a[])
{
    // 请在此添加代码,实现函数silly
    /********** Begin *********/
	bool flag = false;
	if (a[0] == '-') flag = true;
	int i = 0, num = 0;
	while (a[i] != '\0') {
		if (a[i] == '2') num ++ ;
		i ++ ;
	}
	int tmp = 1;
	if ((a[i - 1] - '0') % 2 == 0) tmp = 2;
	if (flag) return (double)num / (i - 1) * 1.5 * tmp;
	return (double)num / i * tmp;
    
    /********** End **********/
}

T5 队列变换

有点奇怪,我做的时候感觉题目描述有点问题?自己对着样例在纸上画一画,然后注意坐标的转换就可以了。

#include <iostream>
using namespace std;

// 函数rotateLeft:矩阵循环左移
// 参数:a-100*100的二维数组,用来存储n行n列的数组(n<100),存储在其~n-1行和~n-1列,
// m-循环左移的位数(0<m<n)
// 返回值:无,循环左移的结果写入原二维数组中
// 说明:传递多维数组时,形式参数中,除了第一维外,其它维的大小必须给出
// 方便编译器计算每个数组元素的地址
void rotateLeft(int a[][100],int n,int m);

int main()
{
    int a[100][100];     // 定义存储二维数组的空间
    int n, m;
    cin >> n >> m;     // 输入n和m

    // 输入n*n的矩阵,存储在数组a的~n-1行和~n-1列
    int i, j;
    for(i = 0; i < n; i++)
        for(j = 0; j < n; j++)
            cin >> a[i][j];

    // 循环左移
    // 说明:传递多维数组时,实在参数只需要给出数组名就可以了
    rotateLeft(a,n,m);

    // 输出循环右移的结果
    for(i = 0; i < n; i++)
    {
        for(j = 0; j < n; j++)
            cout << " " << a[i][j];
        cout << endl;
    }
    return 0;
}
int b[110][110];
void rotateLeft(int a[][100],int n,int m)
{
    // 请在此添加代码,实现函数rotateLeft
    /********** Begin *********/
    for (int i = 0; i < n; i ++ ) for (int j = 0; j < n; j ++ ) b[i][j] = a[i]
[j];
	for (int i = 0; i < n; i ++ ) {
		for (int j = 1; j <= m; j ++ ) a[i][n - m + j - 1] = b[i][j - 1];
		for (int j = 1; j <= n - m; j ++ ) a[i][j - 1] = b[i][m + j - 1];
	}
    /********** End **********/
}

T6 朋友圈点赞

这个题给我们了一个思路,就是记录最大值的同时记录哪个位置是最大值。文章来源地址https://www.toymoban.com/news/detail-451424.html

#include <bits/stdc++.h>

using namespace std;

int v[1010];

int main() {
    int n; cin >> n ;
    for (int i = 1; i <= n; i ++ ) {
        int k; scanf("%d", &k);
        while (k -- ) {
            int x; scanf("%d", &x); v[x] ++ ;
        }
    }
    int id = 1000, mx = v[1000];
    for (int i = 1000; i; i -- ) {
        if (v[i] > mx) mx = v[i], id = i;
    }
    cout << id << ' ' << mx << endl ;
    return 0;
}

到了这里,关于【Educoder作业】C&C++数组实训的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CSS--头歌(educoder)实训作业题目及答案

    目录 CSS——基础知识 第1关: 初识CSS:丰富多彩的网页样式 第2关: CSS样式引入方式 CSS——基础选择器 第1关: CSS 元素选择器 第2关: CSS 类选择器 第3关: CSS id选择器 CSS——文本与字体样式 第1关: 字体颜色、类型与大小 第2关: 字体粗细与风格 第3关: 文本装饰与文本布局 CSS——

    2024年04月15日
    浏览(92)
  • 【Educoder作业】C&C++线性表实训

    第一次接触链表的话,可能会有疑惑。疑惑在于它到底比数组强在哪里。写完这次实训可能就会感受到,或者写了这10个题还是没有头绪,本篇结尾我们就稍微聊一聊。 T1 顺序构建线性表 这个题可以说是定了整个实训的基调,结构体里是包含了一个本身的数据 d a t a data d a

    2024年02月16日
    浏览(26)
  • JavaScript上部分--头歌(educoder)实训作业题目及答案

      目录 JS简介 第1关: JavaScript基础入门 第2关: JavaScript 与 HTML 第3关: JavaScript 变量 JS 数据类型 第1关: JavaScript 数据类型介绍 第2关: JavaScript 数据类型转换 JS运算符 第1关: 算术运算符 第2关: 比较和逻辑运算符 第3关: 条件和赋值运算符 第4关: 运算符的优先级和结合性 JS对象 第

    2024年02月08日
    浏览(27)
  • JavaScript下部分--头歌(educoder)实训作业题目及答案

    目录  JSON 第1关: JSON对象 第2关: JSON数组 第3关: JSON字符串 Math、日期和异常处理 第1关: Math类 第2关: Date类 第3关: JavaScript错误 HTML DOM——文档元素的操作(一) 第1关: 通过id获取文档元素 第2关: 通过类名获取文档元素 第3关: 通过标签名获取文档元素 第4关: html5中获取元素的

    2023年04月26日
    浏览(33)
  • JavaScript上部分--头歌(educoder)实训作业题目及答案 JS简介

      目录 JS简介 第1关: JavaScript基础入门 第2关: JavaScript 与 HTML 第3关: JavaScript 变量 JS 数据类型 第1关: JavaScript 数据类型介绍 第2关: JavaScript 数据类型转换 JS运算符 第1关: 算术运算符 第2关: 比较和逻辑运算符 第3关: 条件和赋值运算符 第4关: 运算符的优先级和结合性 JS对象 第

    2023年04月22日
    浏览(74)
  • 头歌(educoder)实训作业题目及答案分享 ——1-4 Java入门 - 分支结构

    📜个人简介 :  作者简介:大家好,我是Passenger.n✌️  支持一下:点赞👍+收藏🌟+留言📪 📣 系列专栏:java基础🍁 ✉️格言:花有重开日,人无再少年!🌞 万事开头难,既然迈开了这一步,那就坚持走下去! 这是我的第一篇博客,希望萌新看了有收获,大佬看了给指

    2024年02月06日
    浏览(73)
  • 头歌(educoder)实训作业题目及答案分享 ——1-7 Java入门-分支与循环练习

    📜个人简介 :  作者简介:大家好,我是Passenger.n✌️  支持一下:点赞👍+收藏🌟+留言📪 📣 系列专栏:java基础🍁 ✉️格言:花有重开日,人无再少年!🌞 万事开头难,既然迈开了这一步,那就坚持走下去! 这是我的第一篇博客,希望萌新看了有收获,大佬看了给指

    2024年02月04日
    浏览(49)
  • 头歌(educoder)实训作业题目及答案分享 ——1-3 Java入门 - 运算符和表达式

    📜个人简介 :  作者简介:大家好,我是Passenger.n  支持一下:点赞👍+收藏🌟+留言📪 📣 系列专栏:java基础🍁 ✉️格言:花有重开日,人无再少年!🌞 万事开头难,既然迈开了这一步,那就坚持走下去! 这是我新的一篇博客,希望萌新看了有收获,大佬看了给指路😝

    2024年02月07日
    浏览(71)
  • 【Educoder离散数学实训】关系基础

    题有点多,能聊的不多。有些题还是比较有价值的 就单独说几个题,代码放在最后。所有函数都改成自己写的了,没准比答案给的好读一点? T1 求给定集合的对角线关系(diagonal relation) 我觉得如果卡住的话,第一关会是一个大坎。 因为我们并不知道他到底在说啥,于是我

    2024年02月07日
    浏览(38)
  • Educoder C&C++线性表实训

    目录 第1关:顺序构建线性表 第2关:逆序构建线性表 第3关:排序构建线性表 第4关:查找元素 第5关:删除指定位置的结点 第6关:删除包含特定数据的结点 第7关:线性表长度 第8关:线性表应用一:栈 第9关:线性表应用二:队列 第10关:线性表应用三:集合 第1关:顺序

    2024年02月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包