CCF201712-1 最小差值(100分)


试题编号:201712-1
试题名称:最小差值
时间限制:1.0s
内存限制:256.0MB
问题描述:具体如下

问题描述

  给定n个数,请找出其中相差(差的绝对值)最小的两个数,输出它们的差值的绝对值。

输入格式

  输入第一行包含一个整数n。
  第二行包含n个正整数,相邻整数之间使用一个空格分隔。

输出格式

  输出一个整数,表示答案。

样例输入

5
1 5 4 8 20

样例输出

1

样例说明

  相差最小的两个数是5和4,它们之间的差值是1。

样例输入

5
9 3 6 1 3

样例输出

0

样例说明

  有两个相同的数3,它们之间的差值是0.

数据规模和约定

  对于所有评测用例,2 ≤ n ≤ 1000,每个给定的整数都是不超过10000的正整数。
  


问题链接:CCF201712-1 最小差值

问题分析:

模块/分析思路数据结构选择算法实现
输入/数据初始化在主函数中接受n,为了模块化,将输入数据功能写成函数,主函数调用其即可全局向量容器构造数组对象储存数据使用一个for循环
数据处理最直观想法是计算出任意两个数并进行比较,可见计算与比较次数相同,均为n(n-1)/2次;若是先对数组排序,只需计算与比较n-1次。由于只需输出差值,所以不需要记录具体的两个值,先计算出第一个差值,计算出当前差值立即与之前差值比较,保留较小者整型中间变量冒泡排序;一个for循环;绝对值函数
输出只需输出数据处理的结果存储最小值的整型中间变量输出控制台即可

C++代码

#include<iostream>
using namespace std;
#include<vector>
#include<math.h>

vector<int> array;//为了便利,使用容器定义全局整型数组 

void inputData(int n)//数据输入 
{
    int temp=0;
    for(int i=0;i<n;i++)
    {
        cin>>temp; 

        //向量容器输入必须用函数,不能像数组一样用[];
        //若是嵌套向量,必须使用辅助向量想输入里层的值,在将其存入外层
        array.push_back(temp); 
    }
} 

//自写的冒泡排序,参数为引用的全局数组 
void bubbleSort(vector<int>& arr,int n)
{
    for(int i=0;i<n-1;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            if(arr[i]>arr[j])
            {
                int tmp=arr[i];
                arr[i]=arr[j];
                arr[j]=tmp;
            }
        }
    }
}

//数据处理函数,找到最小差值并直接输出;
//由于输出十分简单,故将输出函数合并于此 
void min(vector<int>& arr,int n)
{
    int min=0;
    bubbleSort(arr,n);
    min=abs(arr[1]-arr[0]);
    for(int i=1;i<n-1;i++)
    {
        if(min>abs(arr[i]-arr[i+1]))min=abs(arr[i]-arr[i+1]);
    }
    cout<<min;
}

int main()
{
    int n;
    cin>>n;
    inputData(n);
    min(array,n);
    return 0;
} 

心得体会

  • vector虽然比较方便,但是使用时要注意细节,记住他是对象,干啥都要调用函数
  • 博客之牛刀小试
    • 描述与分析问题显然不够简洁清晰,有些啰嗦;
    • 排版美化,重点概述标题命名怎么四两拨千斤,最简洁的话表达最多信息,同时还有自己分格
    • md的表格无法换行,这很难受,后续改进
    • 自豪的是用表格的方式将问题分解为三个大模块:数据的输入、处理、输出;三个模块各自又对应着具有依赖关系的三个分析步骤:首先明确目标,思路成型后使用自然语言表述解决方案 ,其次根据解决方案选着合适的数据结构,同时设计相应的算法。
  • 在可以将问题分解的情况下,不存在难题。所以问题解决时对其的分解尤其重要,想要分解就必须能够清楚的将各种情况分开,找到他的结构框架,这一步是最难的;进而细化,找到框架后越细化越简单,因为越来越接近熟悉的知识
  • 表达无论在哪一行都极其重要,像是编程语言,无非熟能生巧,自然语言更是如此,书写表达需要长期坚持磨炼,在2018/9/15凌晨一点纪念这良好的开端。
  • 知识的意义在于分享,写博客真是个利人利己的事,希望看到这里的你继续加油!加油!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值